Delphi中,何时指针(P)1的间接引用((指针)(P)1)^能正常工作?

2026-04-10 20:332阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计471个文字,预计阅读时间需要2分钟。

Delphi中,何时指针(P)1的间接引用((指针)(P)1)^能正常工作?

我正在研究Delphi XE2,我在研究PInteger类型。如果在我的Delphi代码中这样写:

Delphi中,何时指针(P)1的间接引用((指针)(P)1)^能正常工作?

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

这段代码的作用是:通过指针P访问数组Scores的第一个元素,然后通过指针算术计算出第二个元素的值,并输出。

我正在研究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’!

我不清楚这是怎么发生的,什么时候((指针)(P)1)^可以工作?

指针算术要求编译器知道指向的元素的大小.对于类型为Pointer的无类型指针,该知识永远不会被人知道.所以你永远不能用指针进行指针运算.

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

请注意,该指令启用了加法或算术运算符以及数组索引运算符[].

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

话虽如此,如果您编写P [1],您的代码会更清晰.显然,这需要启用指针算法.

本文共计471个文字,预计阅读时间需要2分钟。

Delphi中,何时指针(P)1的间接引用((指针)(P)1)^能正常工作?

我正在研究Delphi XE2,我在研究PInteger类型。如果在我的Delphi代码中这样写:

Delphi中,何时指针(P)1的间接引用((指针)(P)1)^能正常工作?

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

这段代码的作用是:通过指针P访问数组Scores的第一个元素,然后通过指针算术计算出第二个元素的值,并输出。

我正在研究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’!

我不清楚这是怎么发生的,什么时候((指针)(P)1)^可以工作?

指针算术要求编译器知道指向的元素的大小.对于类型为Pointer的无类型指针,该知识永远不会被人知道.所以你永远不能用指针进行指针运算.

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

请注意,该指令启用了加法或算术运算符以及数组索引运算符[].

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

话虽如此,如果您编写P [1],您的代码会更清晰.显然,这需要启用指针算法.