2011-11-09 72 views
-1

可能重複:
Declaring pointers; asterisk on the left or right of the space between the type and name?
Does it matter where I place the asterisk when declaring pointers in C++?爲什麼人們使用Type * var而不是Type * var?

我搜索,但我的關鍵字似乎並不適合。我很確定這個問題已經被問到了,所以如果你知道鏈接或者其他東西的話,請指出一些方向。

我的問題是,爲什麼這麼多的人使用

TypeIdentifier *varname; 

而不是

TypeIdentifier* varname; 

這是更合乎邏輯的我爲*修改的類型,而不是變量名。

+3

在提出新問題之前,請先使用搜索 - 已在SO上詢問並回答了*多次*。 –

+0

男人,我必須訓練我的關鍵字技巧。感謝您的鏈接。 @mekici是的,它的確如此。那麼,我呢。它有時讓我很困惑,我必須仔細看看這個變量究竟是什麼類型。 –

+0

Stroustrup建議'Type * name'而不是'Type * name' –

回答

3

在C和C++中,聲明語法(主要)都遵循用法。

聲明

int *n; 

可以讀作 「nint*型的」,或爲 「*nint類型的」。如果你看看語言語法,後者更接近於它被解析的方式。

對於只包含一個名稱(如int)和*的類型,它沒有太大區別,但對於更復雜的聲明很重要。

通常的趨勢是在C中使用int *n;,在C++中使用int* n;。後者是因爲這是Stroustrup的個人偏好。我認爲他的觀點是,「nint*」閱讀更自然,複雜性可以通過不寫複雜的聲明來避免。例如,你喜歡的任何間距,最好是寫

int *a; 
int b; 

比任何

int* a, b; 

int *a, b; 
0

由於K & R使用Foo *bar和人們堅持下去。

1

那麼,語言的語法說不然。你可以很容易地通過檢查

Type * var1, var2; 

這裏會發生什麼?

1

這是因爲C'S聲明語法。

int* a, b; 

看起來好像它定義int*類型的兩個變量,但實際上宣告aint*類型和bint類型。如果你寫

int *a, b; 

這是顯而易見的。但我個人更喜歡不寫這樣的定義,而是寫

int* a; 
int b; 

這不會對類型產生疑問。

1

的C約定是附加*的變量,因爲連續多個變量不共享*

int *a, b; /* a is an int*, while b is an int. */ 

在C++中,規則是一樣的,但更常見到疣連接到類型,由於上述聲明的混亂性質,並宣佈每聲明只有一個變量的後續做法:

int* a; 
int b; 

我傾斜朝向C++慣例,但還允許含多處e在一條線上的非指針或參考聲明:

int a, b; 
int* c; 
int* d; 
相關問題