2013-03-28 189 views
-3

有沒有用C的區別,如果我聲明函數是這樣的:差異函數聲明Ç

Type * AK_init_observer(); 

像這樣:

Type* *AK_init_observer(); 
+0

呀,第二個返回一個雙指針('Type **') –

回答

3

是的,是有區別的。

  • 在第一種情況下,AK_init_observer返回一個指向TypeType *)。
  • 在第二種情況下,AK_init_observer返回指向TypeType **)的指針的指針。

由於空間不事在這裏,兩個聲明等同於:

Type *AK_init_observer(); 

和:

Type **AK_init_observer(); 

參考

C11(n1570),§ 5.1.1.1程序結構

7)分隔令牌的空白字符不再重要。

4

是的,返回類型是不同的。第一個返回指向Type的指針,而第二個返回指向Type的指針的指針。

0

是的,第二個是你返回一個指針指針。例如:

char *function();    // Returns a pointer to a char - or a 'string' 


char **function();   // Returns an array of strings 
+0

字符串和字符指針之間的差異非常棘手,這使得這個答案非常混亂。 – ugoren

+0

除了與它無關的事實之外,字符串通常是'char *'。 – md5

+0

哦,我現在看到,我輸入了我的意見錯誤。男人,這是我得到匆忙做的東西。我編輯了我的答案。十分感謝大家 –

1

它很容易與已知類型的理解,說int,而不是Type

int *f1(); 

返回一個指針爲int。您可以跟隨指針,找到INT:

int *p = f1(); 
printf("%d\n", *p); 

但是:

int **f2(); 

返回一個指針,它指向另一個指針,它指向INT:

int **p1 = f2(); 
int *p2 = *p1; 
printf("%d\n", *p2);