C中的int * ptr和int * ptr有什么区别?

我在C上相当新,我不知道以下两个变量声明之间的区别:

int* ptr; int *ptr; 

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

我不确定是不是这样。

请帮助我理解这两个声明背后的概念。

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

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

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

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

此语句声明了多个指针,这会阻止使用“int *”间距。

 int *ptr1, *ptr2, *ptr3; 

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

像其他人说的那样。 没有区别。 如果您想了解更复杂的C类型声明,您可以找到此链接有用。 阅读C声明 。

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

int *p;

 *p 

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