Установить указатель адреса на указатель в 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 байтов остаются такими же, как и раньше

Другие вопросы по тегам