2015-04-13 4 views
0

Я не понимает, исходный код PL/I:Установить указатель адреса на указатель в PL/I

 DCL AA CHAR(10) BASED(P1); 
     DCL BB CHAR(10) INIT ("BBBBBBBBBB"); 
     DCL CC CHAR(10) INIT ("CCCCCCCCCC"); 
     DCL DD CHAR(10) INIT ("DDDDDDDDDDD"); 
     DCL ADDR BUILTIN; 
     DCL P1 PTR; 
     DCL P2 PTR; 

     P1 = ADDR(BB); 
     Display(AA); 

     P1 = ADDR(P2); 
     Display(AA); 

     P2 = ADDR(DD); 
     Display(AA); 

помогает мне понять переменный дисплей АА. Большое спасибо

ответ

2

по моему скромному мнению, это так;

Давайте условимся, что переменная AA представляет 10 байт памяти, начиная указатель адреса P1 в DSA

Statement P1 = ADDR (ВВ); делает P1 точкой по адресу BB, затем отображается (AA); будет отображаться 10-значный байт, равный BB

Заявление P1 = ADDR (P2); делает точку P1 на другом адресе в DSA, а именно, где находится переменная P2. Таким образом, оператор display показывает 10 байтов хранения, из которых 4 байта равны адресу ... ну ничего не предсказуемого еще, поскольку указатель P2 еще не инициализирован

Заявление P2 = ADDR (DD); перемещает адрес DD в P2, а следующий оператор dispaly дает адрес DD в первых 4 байтах, а следующие 6 байтов - это то, что будет следующим в DSA - однако эти 6 байтов остаются такими же, как и раньше

+0

Спасибо за ответ, я не знаю детали DSA? –

+0

Один из способов - использовать PLIDUMP, например CALL PLIDUMP («TBHS», «STORAGE IN USE»); – FinnLund

 Смежные вопросы

  • Нет связанных вопросов^_^