gpt4 book ai didi

delphi - ((指针)(P)+1)^什么时候可以起作用?

转载 作者:行者123 更新时间:2023-12-03 15:46:35 26 4
gpt4 key购买 nike

我正在开发 delphiXE2,并且正在开发 PInteger。如果我在我的delphi代码中这样做

var
P: PInteger;
testInt: Integer;
Scores: array[0..4] of Integer=(33,44,56,78,78);
begin
P := @Scores;
testInt := (P+1)^;
WriteLn(testInt);
ReadLn;
end;

我收到此错误。

[DCC Error] Project1.dpr(23): E2015 Operator not applicable to this operand type

PS:testInt := (P+1)^;是第23行

但是当我尝试这个时

var
PCh: PChar;
testchar: char;
str: array[0..4] of char=('a','b','c','d','e');
begin
PCh := @str;
testchar := (PCh+1)^;
WriteLn(testchar);
ReadLn;
end;

效果很好!控制台可以打印'b'!

我不清楚这是如何发生的以及 ((Pointer)(P)+1)^ 何时可以工作?

最佳答案

指针算术要求编译器知道所指向元素的大小。对于 Pointer 类型的无类型指针来说,这种知识永远是未知的。所以你永远不能用 Pointer 进行指针算术。

Delphi 一直支持 AnsiChar 的指针运算。最近的编译器指令 POINTERMATH添加,以启用所有类型指针的指针算术:http://blogs.embarcadero.com/abauer/2008/01/24/38852

请注意,该指令启用加法算术运算符和数组索引运算符 []。

因此,如果启用指针算术,则可以对除无类型指针之外的所有指针执行算术。否则,仅支持指向字符类型的指针或指向字节的指针。

话虽如此,如果您改为编写 P[1],您的代码会干净得多。显然,这需要启用指针算术。

关于delphi - ((指针)(P)+1)^什么时候可以起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19510277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com