c - C 中的指针数学与 Delphi 中的指针数学

标签 c pointers delphi pointer-arithmetic

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

相关文章:

c - 为什么指针 "Start"会改变? (C)

windows - 用户使用阿拉伯/回历日历的 Delphi 问题

delphi - System.copy 和 StrUtils.MidStr 之间的区别

arrays - 为什么函数返回的数组总是空数组?

c - 共享内存的重新分配

objective-c - 如何测试一个对象是否是另一个对象

c - c 中的指针和 c 程序

delphi - 如何在 Delphi 2009 中获取图像的当前 View 大小

java - Android 应用程序在使用 JNI 后随机崩溃

c++ - 从 C 调用包含 STL 数据类型的 C++ 函数