C 中的指针数学与 Delphi 中的指针数学
Pointer math in C vs pointer math in Delphi
我必须将以下 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 位字?
我也不确定 Delphi 指针数学语法。逻辑上 Delphi 中的 p[i]
代码应该像 p[i]^
一样寻找我,但最后一个变体会产生编译器错误 "E2017 Pointer type required".
我的代码转换尝试是否正确?
请注意,我将在下面的答案中使用 i
而不是 d1str + d1st1
作为索引,因为这样可以使说明更清楚。一旦您以这种更简单的形式理解它,就会更容易理解实际代码。
Does p[i]
mean that p
is taken and then advanced for i
bytes?
没有。这意味着,p
被视为指向 short
数组的指针。然后 p[i]
是该数组的第 i 个元素。
p[i]
in Delphi code should look for me like p[i]^
没有。 p[i]
是类型 short
的表达式。那不是一个指针,所以你不能对它应用 ^
。
Is my code conversion attempt correct?
是的。
我必须将以下 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 位字?
我也不确定 Delphi 指针数学语法。逻辑上 Delphi 中的 p[i]
代码应该像 p[i]^
一样寻找我,但最后一个变体会产生编译器错误 "E2017 Pointer type required".
我的代码转换尝试是否正确?
请注意,我将在下面的答案中使用 i
而不是 d1str + d1st1
作为索引,因为这样可以使说明更清楚。一旦您以这种更简单的形式理解它,就会更容易理解实际代码。
Does
p[i]
mean thatp
is taken and then advanced fori
bytes?
没有。这意味着,p
被视为指向 short
数组的指针。然后 p[i]
是该数组的第 i 个元素。
p[i]
in Delphi code should look for me likep[i]^
没有。 p[i]
是类型 short
的表达式。那不是一个指针,所以你不能对它应用 ^
。
Is my code conversion attempt correct?
是的。