int * i和int * i之间的区别

我正在将用C编写的DLL的头文件转换为Delphi,因此我可以使用DLL。

我的问题是有什么区别

int* i 

 int *i 

我将第一个转换为

 i: PInteger; 

但我不确定Delphi中第二个转换的正确转换是什么。

从我的理解,第一个是一个简单的类型指针。 第二个是指针变量。 但我不确定区别是什么。

int* iint *i完全等效

就C来说,他们都做同样的事情。 这是一个偏好的问题。 int* i清楚地表明它是一个int指针类型。 int *i显示星号仅影响单个变量的事实。 所以int *i, jint* i, j都会创建i作为int指针, j作为int。

他们是一样的。 两种不同的风格来自C语法中的怪癖。

有些人喜欢int* i; 因为int*是i的类型。

其他人更喜欢int *i; 因为解析器将星形附加到变量,而不是类型。 只有在尝试在线上定义两个变量时,这才有意义。 无论你如何写它:

  int* i,j; int*i,j; int *i,j; 

在每一个中, i是指向int的指针,而j只是一个int。 最后一种语法使得更清晰,但更好的是:

  int j, *i; 

还是最好的:

  int *i; int j; 

这是C语法的一个意外,您可以编写int *iint* i甚至int * i 。 所有这些都被解析为int (*i) ; IOW, *绑定到声明符,而不是类型说明符。 这意味着在声明中

 int* i, j; 

只有i被宣布为指针; j被声明为常规int。 如果要将它们都声明为指针,则必须编写

 int *i, *j; 

大多数C程序员使用T *p而不是T* p ,因为a)C中的声明是以表达为中心的,而不是以对象为中心的,b)它更接近地反映了声明语法。

作为我以表达为中心的意思的一个例子,假设你有一个指向int的指针数组,你想得到元素i的整数值。 对应于该值的表达式是*a[i] ,表达式的类型int ; 因此,数组的声明是

 int *a[N]; 

当您在C编程中看到关于“声明模仿使用”的短语时,这意味着什么。

没有区别。 如果你愿意,可以输入int * i ; 它们都意味着同样的事情:“我是指向int的指针。”

这是同一件事。

一些开发人员更喜欢int* i表示法,因为这种方式i的类型显然是“指向int的指针”,而int *i似乎不太可读。

int* iint * iint*iint *i都完全等价。 这源于C编译器(以及它兼容的C类系统)忽略在解析源代码的过程中生成的令牌流中的空白空间。

有些人喜欢使用int* i认为它使代码更清晰(因为指针指令被视为他们头脑中类型的一部分)。 有些人喜欢使用int *i认为它使代码更清晰(因为类型是int,并且它们有一个“i指针”)。 在编译器运行源代码之后,这两种技术都没有做任何不同的事情。 如有疑问,请模仿现有的风格。