int * i和int * i之间的区别
我正在将用C编写的DLL的头文件转换为Delphi,因此我可以使用DLL。
我的问题是有什么区别
int* i
和
int *i
我将第一个转换为
i: PInteger;
但我不确定Delphi中第二个转换的正确转换是什么。
从我的理解,第一个是一个简单的类型指针。 第二个是指针变量。 但我不确定区别是什么。
int* i
和int *i
完全等效
就C来说,他们都做同样的事情。 这是一个偏好的问题。 int* i
清楚地表明它是一个int指针类型。 int *i
显示星号仅影响单个变量的事实。 所以int *i, j
和int* 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 *i
或int* 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* i
, int * i
, int*i
和int *i
都完全等价。 这源于C编译器(以及它兼容的C类系统)忽略在解析源代码的过程中生成的令牌流中的空白空间。
有些人喜欢使用int* i
认为它使代码更清晰(因为指针指令被视为他们头脑中类型的一部分)。 有些人喜欢使用int *i
认为它使代码更清晰(因为类型是int,并且它们有一个“i指针”)。 在编译器运行源代码之后,这两种技术都没有做任何不同的事情。 如有疑问,请模仿现有的风格。