Установить указатель адреса на указатель в 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);
помогите мне понять переменную дисплея AA. Большое спасибо
1 ответ
По моему скромному мнению, это выглядит так;
Давайте согласимся, что переменная AA представляет 10 байтов памяти, начиная с адреса указателя P1 в DSA
Ведомость P1 = ADDR(BB); делает точку P1 по адресу BB, затем Display(AA); покажет 10 символьных байтов, равных BB
Ведомость P1 = ADDR(P2); делает точку P1 другим адресом в DSA, а именно, где находится переменная P2. Таким образом, оператор display показывает 10 байтов памяти, из которых 4 байта равны адресу... ну, ничего предсказуемого пока нет, так как указатель P2 еще не инициализирован
Ведомость P2 = ADDR(DD); перемещает адрес DD в P2, и следующий оператор отображения дает адрес DD в первых 4 байтах, и следующие 6 байтов - это то, что происходит следующим в DSA - однако эти самые 6 байтов остаются такими же, как и раньше