我必须将以下 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?
是的。
关于c - C 中的指针数学与 Delphi 中的指针数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61751700/