我正在将用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指针和j
int.
Vla*_*mir 31
int* i
并int *i
完全相同
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编程中看到关于"声明模仿使用"的短语时,这意味着什么.