我正在将用C编写的DLL的头文件转换为Delphi,因此我可以使用DLL。
我的问题是
之间有什么区别int* i
和
int *i
我将第一个转换为
i: PInteger;
但我不确定Delphi中第二个转换的正确转换。
从我的理解第一个是一个简单的类型指针。 第二个是指针变量。但我不确定区别是什么。
答案 0 :(得分:49)
就C而言,他们都做同样的事情。这是一个偏好的问题。 int* i
清楚地表明它是一个int指针类型。 int *i
显示星号仅影响单个变量的事实。因此int *i, j
和int* i, j
都会将i
创建为int指针,将j
创建为int。
答案 1 :(得分:30)
int* i
和int *i
完全等效
答案 2 :(得分:11)
他们是一样的。这两种不同的风格来自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;
答案 3 :(得分:10)
您可以编写int *i
或int* i
甚至int * i
来解决C语法问题。所有这些都被解析为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编程的短语“声明模仿使用”时,这就是我的意思。
答案 4 :(得分:4)
没有区别。如果您愿意,可以将其键入int * i
;它们都意味着同样的事情:“我是指向int的指针。”
答案 5 :(得分:3)
这是一回事。
有些开发人员更喜欢int* i
表示法,因为这样i的类型显然是“指向int的指针”,而int *i
似乎不太可读。
答案 6 :(得分:3)
int* i
,int * i
,int*i
和int *i
都完全等效。这源于C编译器(以及它兼容的C类系统),忽略了在解析源代码过程中生成的令牌流中的空白区域。
有些人更喜欢使用int* i
认为它使代码更清晰(因为指针指令被视为他们头脑中类型的一部分)。有些人更喜欢使用int *i
认为它使代码更清晰(因为类型是一个int,并且它们有一个“i指针”)。在编译器运行源代码之后,这两种技术都没有做任何不同的事情。如有疑问,请模仿现有的风格。
答案 7 :(得分:0)
上述要点突出了“类型*”最有意义的情况。
但是我个人发现“ Type *”具有直觉意义/更具可读性的情况是在将引用传递给指针类型时。对于初学者来说,将变量读取为:
int *&x; // what is x here ?
相对于:
int* (&x); // A reference to a int* type