2011-10-17 145 views
5

我位于C相当新的,我不知道以下两个变量声明之间的区别:C中的int * ptr和int * ptr有什么区别?

int* ptr; 
int *ptr; 

我认为在声明int* ptr;ptr的价值不能被改变,而这是可以改变的对于申报,int *ptr;

我不知道是不是这样。

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

+0

[C:是否存在“int \ * fooBar;”之间的差异和“int \ * fooBar;”?](http://stackoverflow.com/questions/2093459/c-is-there-a-difference-between-int-foobar-and-int-foobar)和[int \ * i和int \ * i](http://stackoverflow.com/questions/3770187/difference-between-int-i-and-int-i),[int \ * p和int \ * p声明之间的区别](http://stackoverflow.com/questions/5590150/difference-between-int-p-and-int-p-declaration)以及至少一些其他人。 –

+0

http://stackoverflow.com/questions/3770187/difference-between-int-i-and-int-i –

回答

23

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

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

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

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

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

int *ptr1, *ptr2, *ptr3; 
4

C中的空格大多不重要。偶尔有空间很重要的情况,但这些情况很少,而且很少。你发布的两个例子是相同的。

2

像其他人说的。没有区别。如果你想了解更复杂的C类型声明,你可以找到这个链接用户。 Reading C declarations

1

int *p;

*p 


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

相关问题