2011-04-08 191 views

回答

31

沒有區別

這是一個表示法,而不是語義學。二是少誤導,因爲

int *a, b; 

清楚地聲明一個int*int,而

int* a, b; 

看起來好像它是聲明瞭兩個三分球,當它真正做上述同樣的事情。

+0

很好的解釋 – cc4re 2013-06-22 19:32:59

3

這兩個聲明在聲明單個指針時是等效的。對於這個更多看link

17

這是一個很好的問題。

  • int* p

    • 被C廣泛使用++程序員
    • int* p, q錯誤地意味着既pq是指針(導致偏好用於聲明此兩行上,這也提高了可讀性當存在是作業,並且使得更容易快速地剪切/粘貼或評論特定的線/變量)
    • int* p視覺separ茨從標識符
    • *p然後明確地指示取消引用類型(假設你把空間周圍的二進制operator* ALA 2 * 3
    • 在C++ ...&x
    • 顯然服用而...& x必須聲明一個參考變量的地址,並... & ...是按位與運算
  • int *p

    • 廣泛使用d by C程序員
    • int *p, q明確反映p是指針而q不是。
    • int *p視覺混淆與所述標識符的類型
    • 目視從指針引用不可區分的(更好或更壞)

類似地,對於出現在函數聲明類型...

int* f(), g(); // declares int g(); 
int *h(), (*i)(); // i is pointer to function returning int 
int *const*m(), n(); // m returns pointer to (const-pointer to int) 
        // n returns int 

...但至少函數參數不能變得如此毛茸茸 - 類型規範在每個逗號分隔符後重新開始。

綜上所述,int *p是更好,如果您的編碼風格/代碼庫利用上的源代碼一行多個聲明,否則int* p提供類型的更清楚的分離和下面的標識符。

對於這一切,人們的偏好很大程度上取決於他們習慣了什麼。

0

這兩個聲明是完全一樣的!

相關問題