我必须将以下 C 代码重写为 Delphi:
register short* p;
short k;
int i;
k = p[i];
结果如下所示:
{$POINTERMATH ON}
var
p: ^SmallInt;
k: SmallInt;
i: Integer;
begin
k := p[i];
end;
现在我有点不确定这里使用的指针数学。
p[i]
是否意味着p
被采用然后前进i
字节?
或者可能是p
被采用然后前进i
16 位字?
我也不确定德尔菲指针数学语法。逻辑上p[i]
Delphi 代码应该像p[i]^
一样寻找我,但最后一个变体会产生编译器错误"需要 E2017 指针类型"。
我的代码转换尝试是否正确?
请注意,我将在下面的答案中使用i
而不是d1str + d1st1
作为索引,因为它使阐述更加清晰。一旦你以这种更简单的形式理解了它,就会更容易理解实际的代码。
p[i]
是否意味着p
被采用然后前进i
个字节?
不。这意味着,p
被视为指向short
数组的指针。然后p[i]
是该数组的第 i 个元素。
德尔福代码中的
p[i]
应该像p[i]^
一样寻找我
不。p[i]
是类型short
的表达式。这不是一个指针,所以你不能^
应用于它。
我的代码转换尝试是否正确?
是的。