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

Mik*_*lor 32 c delphi

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

我的问题是有什么区别

int* i
Run Code Online (Sandbox Code Playgroud)

int *i
Run Code Online (Sandbox Code Playgroud)

我将第一个转换为

i: PInteger;
Run Code Online (Sandbox Code Playgroud)

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

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

Kyl*_*yle 51

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


Vla*_*mir 31

int* iint *i完全相同

  • 对不起,但我不能马上接受答案,因为这个问题得到了如此迅速的回答.我得到一个消息告诉我,我只能在11分钟内接受答案 (21认同)
  • 此外,这也是SO的一个值得关注的问题:当您接受问题的答案时,人们就会停止查看问题.我已经好几次注意到了这一点.如果我问一个问题,并将其打开一段时间,很多人都会看到它,有几个人会试着回答它.如果我在早期得到一个体面的答案并接受它,那么观众就会大幅减少.答案中也有一个突然停止,所以也许对这个永远不会出现的问题有更好的答案.值得思考的东西...... (7认同)

Jam*_*ran 12

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

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

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

 int* i,j;
 int*i,j;
 int *i,j;
Run Code Online (Sandbox Code Playgroud)

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

 int j, *i;
Run Code Online (Sandbox Code Playgroud)

还是最好的:

 int *i;
 int j;
Run Code Online (Sandbox Code Playgroud)


Joh*_*ode 11

这是C语法的事故,你可以一次int *i或者int* i甚至int * i.所有这些都被解析为int (*i); IOW,*绑定到声明符,而不是类型说明符.这意味着在声明中

int* i, j;
Run Code Online (Sandbox Code Playgroud)

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

int *i, *j;
Run Code Online (Sandbox Code Playgroud)

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

作为我所说的以表达为中心的一个例子,假设你有一个指向int的指针数组,并且你想获得元素的整数值i.与该值对应的表达式是,表达式*a[i]类型int; 因此,数组的声明是

int *a[N];
Run Code Online (Sandbox Code Playgroud)

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