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

时间:2010-09-22 14:21:01

标签: c delphi

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

我的问题是

之间有什么区别
int* i

int *i

我将第一个转换为

i: PInteger;

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

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

8 个答案:

答案 0 :(得分:49)

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

答案 1 :(得分:30)

int* iint *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 *iint* 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* iint * iint*iint *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