我正在将一个用C语言写的DLL的头文件转换成Delphi格式,以便我可以使用这个DLL。
我的问题是什么是下列两者之间的区别:
int* i
和
int *i
我将第一个转换为
i: PInteger;
但是我不确定在Delphi中第二种的正确转换方式。
据我理解,第一种是一个简单的类型指针。第二种是一个指针变量,但我不确定它们之间的区别。
就C语言而言,它们都能实现同样的功能,这只是个人喜好问题。int* i
清晰地表示这是一个指向整数类型的指针。而int *i
则表明星号(*)只影响单个变量。因此,int *i, j
和int* i, j
都会创建i
作为整数指针,j
作为整数。
int* i
和 int *i
是完全等价的。
它们是相同的。这两种不同的样式来自于C语法中的一个怪癖。
有些人喜欢使用int* i;
,因为int*
是i的类型。
其他人喜欢使用int *i;
,因为解析器将星号附加到变量而不是类型。只有在尝试在一行上定义两个变量时,这才变得有意义。无论你如何编写它:
int* i,j;
int*i,j;
int *i,j;
在这些示例中,i
是指向整数的指针,而 j
只是一个整数。最后一种语法更清晰,不过更好的方式是:
int j, *i;
或者更好的是:
int *i;
int j;
在C语法中,你可以写成int *i
,或者int* i
,甚至是int * i
都是可以的。它们都被解析为int (*i)
;也就是说,*
与声明符绑定,而不是类型说明符。这意味着在像下面这样的声明中:
int* i, j;
只有i
被声明为指针;j
被声明为常规整数。如果您想将它们都声明为指针,您需要编写:
int *i, *j;
T *p
而不是T* p
,因为a)在C中,声明是以表达式为中心而不是以对象为中心的,b)它更接近于声明语法。*a [i]
,并且表达式的类型是int
; 因此,数组的声明是:int *a[N];
没有区别。如果你愿意可以将其打成int * i
,它们的含义都是一样的:"i是一个指向整数的指针"。
int* i
,int * i
,int*i
和int *i
都是完全等效的。这源于C编译器(以及其兼容的类C系统)在解析源代码期间生成的标记流中忽略空格。
有些人喜欢使用int* i
,认为这可以使代码更清晰(因为指针指示符被视为类型的一部分)。有些人喜欢使用int *i
,认为这可以使代码更清晰(因为类型是int,并且他们有一个“i指针”指向它)。在编译器运行源代码后,这两种技术实际上并没有任何不同。如果不确定,模仿现有的风格即可。
这是同样的事情。
有些开发者更喜欢使用int* i
的表示方式,因为这样i的类型清晰明确,即"指向int的指针",而int *i
则看起来不太易读。
与以下不同:
当你想在一行上声明多个指针而不必每次都写*时,可以使用 int* a,b,c,d; 这里,a、b、c、d都是指向整数的指针。
当你想在一行上声明一个指针和一个普通变量时,必须使用 int *a,*b,c,d; 这里,a和b是指向整数的指针,c和d是整数变量。