C int*i和int*i之间的差异

C int*i和int*i之间的差异,c,delphi,C,Delphi,我正在将用C编写的DLL的头文件转换为Delphi,以便使用该DLL 我的问题是两者之间的区别是什么 int* i 及 我将第一个转换为 i: PInteger; 但是我不确定Delphi中第二个的正确转换是什么 据我所知,第一个是一个简单的类型指针。 第二个是指针变量。但是我不确定区别是什么。int*i和int*i是完全等效的没有区别。如果需要,可以将其键入int*i;它们的意思都是一样的:“i是指向int的指针。”就C而言,它们都做同样的事情。这是一个偏好的问题int*i清楚地表明它是一

我正在将用C编写的DLL的头文件转换为Delphi,以便使用该DLL

我的问题是两者之间的区别是什么

int* i

我将第一个转换为

i: PInteger;
但是我不确定Delphi中第二个的正确转换是什么

据我所知,第一个是一个简单的类型指针。
第二个是指针变量。但是我不确定区别是什么。

int*i
int*i
是完全等效的

没有区别。如果需要,可以将其键入
int*i
;它们的意思都是一样的:“i是指向int的指针。”

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

这是一样的


一些开发人员更喜欢
int*i
符号,因为这样i的类型显然是“指向int的指针”,而
int*i
似乎不太可读。

int*i
int*i
int*i
int*i
都是完全等效的。这源于C编译器(及其兼容的C类系统)忽略了在解析源代码过程中生成的令牌流中的空白


有些人更喜欢使用
int*i
,认为这会使代码更干净(因为指针指令在他们心目中被视为类型的一部分)。有些人更喜欢使用
int*i
认为这样可以使代码更干净(因为类型是int,他们有一个指向它的“i指针”)。在编译器运行源代码之后,这两种技术实际上都没有做任何不同的事情。当有疑问时,模仿现有样式。

它们是相同的。这两种不同的风格来自C语法中的一个怪癖

有些人更喜欢
int*iint*
是i的类型

其他人更喜欢
int*i
 int* i,j;
 int*i,j;
 int *i,j;
在每一种情况下,
i
都是指向int的指针,而j只是int。最后一种语法更清楚,不过更好的是:

 int j, *i;
或者最好是:

 int *i;
 int j;

您可以编写
int*i
int*i
甚至
int*i
,这是C语法的一个意外。它们都被解析为
int(*i)
;照此,
*
绑定到声明符,而不是类型说明符。这意味着

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编程的短语“声明模仿使用”时,这就是它的意思

上述要点突出了“类型*”最有意义的情况

但我个人认为“Type*”更直观/可读性更强的情况是,将引用传递给指针类型。对于初学者来说,将变量解读为以下内容是不直观的:

int*&x;//这里的x是什么?

与之相反:


int*(&x);//对int*类型的引用

,因此DLL头中的差异是缺乏一致性或键入错误。谢谢如果你要花时间感谢那家伙,你也能接受他的回答吗?对不起,我不能马上接受答案,因为问题回答得太快了。我收到一条消息,告诉我我也只能在11分钟内接受答案,这也引起了人们的关注:当你接受一个问题的答案时,人们就不再看这个问题了。我已经注意到好几次了。如果我问一个问题,并让它开放一段时间,许多人会看到它,一些人会试图回答它。如果我一开始就得到一个像样的答案并接受它,观众数量就会急剧下降。答案也会突然停止,所以也许有更好的答案来回答这个永远不会浮出水面的问题。值得思考的是……我想我其实已经知道了这一点,但自从我做任何C/C++编码以来已经超过10年了。难道你不喜欢这些语言怪癖:-)我很高兴我已经完全忘记了这一点,但很高兴看到它在某个高评级的地方被注意到。可能是重复的,我很好奇为什么你认为后者可读性较差?谢谢
int *a[N];