#delphi #указатели
Что значат операторы @ и ^ ?? Так же хочется узнать, что будет в Pkts если Psh[4, 1] = ? Blocks = 4; RTParts = 2; BlNum, ROTO: integer mkts = array [0..3, 1..6, 1..16] of SmallInt; msh = array[1..392] of SmallInt; TPmkts = ^mkts; TPmsh = ^msh; Pkts: array[1..Blocks, 1..RTParts] of TPmkts = ( (nil, nil), (nil, nil), (nil, nil), (nil, nil) ); Psh: array[1..Blocks, 1..RTParts] of TPmsh = ( (nil, nil), (nil, nil), (nil, nil), (nil, nil) ); Pkts[Num, ROTO]:= @Psh[Num, ROTO]^[9];
Ответы
Ответ 1
Оператор @ обозначает взятие адреса переменной (получение указателя на переменную) Оператор ^ в коде обозначает разыменование указателя и получение значения переменной. Оператор ^ при объявлении типа обозначает использование указателя. Например PPoint = ^TPoint обозначает, что объект типа PPoint будет указателем на объект типа TPoint. Эти операторы дополняют друг друга. var a: integer; b: pointer; begin a := 123; // теперь b указывает на a b := @a; // приводим указатель к конкретному типу и записываем в адрес, // на который указывает b - новое значение 120 // теперь a будет 120 PInteger(b)^ := 120; end; что будет в Pkts если Psh[4, 1] = 230 ? Pkts[4, 1]:= @Psh[4, 1]^[9]; В Pkts[4,1] будет элемент со смещением 9 от Psh[4,1]. Давайте разберем по шагам, мы получаем адрес переменной Psh[4,1], тут же его разыменовываем обратно в переменную, и от этой переменной берем [9] элемент (то есть похоже что это строка или другой массив). Обратите внимание, что подобный код не скомпилируется в Делфи, т.к. не указан разыменуемый тип @Psh[4, 1].
Комментариев нет:
Отправить комментарий