影響

2010-01-14 84 views

回答

1

從語義上來說,沒有一個是&的觀點。

+2

無論從語法的角度來看。 – avakar 2010-01-14 15:35:52

9

就C編譯器而言,沒有區別。

1

你的意思是char(* getInput)(); 如果沒有括號,你會有一個返回指向字符的指針的函數。使用括號getInput是指向返回char的函數的指針。

2

空間的位置。

+0

好回答=) – 2010-01-14 16:08:42

2

沒有差別。請注意,以下所有聲明都是一樣的:

  • char*getInput();
  • char* getInput();
  • char *getInput();
  • char * getInput();
  • char* getInput();
  • char *getInput();
  • char * getInput();
  • char* getInput ();
  • char *getInput ();
  • char * getInput ();
  • char* getInput () ;
  • char *getInput () ;
  • char * getInput () ;

所有這些讓編譯器知道有一個叫getInput函數返回一個char *,並得到通過特定的,但沒有說明,具體的參數數量,但是未指定,類型。


編輯

空格字符在源文件通常會被忽略,冗餘。

for (n = 0; n < 1000; n++) { /* ... */ } 
for(n=0;n<1000;n++){/*...*/} 

它只在字符串內部以及當需要分隔不能用其他方式分隔的標記時才起作用。

return 9; /* statement that returns from a function */ 
return9; /* statement that evaluates a variable */ 
1

就意義而言根本沒有差別。實際上,甚至在語法方面都沒有。只要空白是某處,沒有問題。兩者都編譯爲完全相同的代碼。

它通常是一個偏好問題,它被使用。傳統的C編碼器通常更喜歡第二種編碼器,因爲它更像是指示類型仍然是char,而不管它是否是指針。正如我相信Bjarne Stroustrup自己指出的,許多C++編碼人員更喜歡char*語法,因爲它在OOP風格中被認爲更多。我個人也喜歡這個,因爲它表示這個變量是一個字符指針

編輯:找不到他實際寫的地方,但你可以很清楚地看到他的BC++ Style and Technique FAQ指南中他更喜歡char*風格的語法。

+0

但是當你聲明一個char數組時,你不會寫'char [N] a;',是嗎?變量的「指針」是聲明的一部分:「*」可以被寫爲看起來好像它是類型說明符的一部分,但它不能準確地反映聲明語法。 – 2010-01-15 02:15:45

7

沒有區別。

int* a; 
int *b; 
int * c; 

a,b或c之間沒有不同。他們都是指針。只要你願意,你可以放置儘可能多的空間。

然而,這些之間的差異:

int* a, a1, a2; 
int *b, b1, b2; 
int *c, *c1, *c2; 

只lnie C具有你宣佈3個指針到整數。 A和B都有一個poitner-int和兩個整數。

1

對編譯器來說,沒有區別。

在我的大腦中,第一種形式是首選,因爲它表明函數更清晰地返回指向char(而不是char)的指針。當然,這是嚴格的恕我直言。

0

我知道我在回答什麼都曾經說過......只想補充一些更多的東西:

什麼ü可能要問可能是: 字符* getInput(); char(* getInput)();

在這裏,第一個代表:getInput是一個函數,它返回指向char的指針。 秒是:getInput是一個指向返回字符的函數的指針。

在複雜的聲明的情況下永遠記得!從內部開始閱讀

請考慮這一點:char *(* getInput)(); 這裏,getInput是一個指向函數的指針,它返回一個指向char的指針。