2011-10-17 81 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沒有意義。

相關問題