9

我是 C 的新手,我不知道以下两个变量声明之间的区别:

int* ptr;
int *ptr;

我认为在声明int* ptr;中,ptr的值不能更改,而声明可以更改,int *ptr;

我不确定是不是这样。

这两个声明背后的概念是什么?

4

5 回答 5

26

对于编译器来说,这两个声明之间没有区别。

对于人类读者来说,前者可能暗示“int*”类型适用于同一语句中的所有声明。但是, * 仅绑定到以下标识符。

例如,以下两个语句都只声明了一个指针。

int* ptr, foo, bar;
int *ptr, foo, bar;

该语句声明了多个指针,从而防止使用“int*”间距。

int *ptr1, *ptr2, *ptr3;
于 2011-10-17T21:06:56.053 回答
4

C中的空格大多是微不足道的。偶尔会出现空格很重要的情况,但这种情况很少见。您发布的两个示例是等效的。

于 2011-10-17T21:07:29.813 回答
2

就像其他人说的那样。没有区别。如果您想了解更复杂的 C 类型声明,您会发现此链接很有用。阅读 C 声明

于 2011-10-17T21:12:07.183 回答
1

它被称为空白运算符重载,请参见此处:http ://www2.research.att.com/~bs/whitespace98.pdf

于 2011-10-17T21:15:10.213 回答
1

int *p;

*p 


对编译器没有意义,(int*) is a type named pointer.

于 2011-10-17T21:42:29.190 回答