2016-09-07 90 views
-3

不確定標題是否解釋它。是什麼區別:在其聲明中帶有指針的函數。爲什麼?

char *s_gets(char * st, int n); 

char s_gets(char * st, int n); 

我還想請問爲什麼會出現在首位的函數聲明的指針?它的目的是什麼?

+3

[說明可以在這裏找到(http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) –

+0

你還會從函數返回一個指針嗎? – Olaf

+0

@Olaf帶**參數? –

回答

4
  • char s_gets(char * st, int n);返回一個字符,就是這樣。
  • char *s_gets(char * st, int n);返回一個指向一個字符的指針,如果它是程序員的意願,它可以被解釋爲指向字符串的指針。
+3

'char *'不是一個字符串,它可能是一個字符串的指針 –

+0

@KeithThompson爲什麼我說它可以被解釋爲一個,如果它是程序員想要的。編輯:好吧,得到你的意思,謝謝 –

+1

體面的回答一個廢話的問題 –

1
char *s_gets(char * st, int n); 

指針返回到char,而

char s_gets(char * st, int n); 

返回一個普通char

我想問一下爲什麼函數聲明中有一個指針呢?它的目的是什麼?

它表示該函數返回一個指針的值。

C聲明語法使用稱爲聲明者的東西來傳達項目的指針性,數組性,功能性或其組合。例如,採取聲明

int *p; 

類型的pint *(指針int)。類型由類型說明符int聲明者*p的組合指定。 pint的性質由類型說明符int給出,並且指示符由聲明者*p給出。

如果用f(void)代替p,你

int *f(void); 

類型的f是 「函數返回指針int」。 f的指針性和功能性由聲明者*f(void)指定。

對於任何類型T和任何聲明符D,下列情況成立:

T D;  // D is an instance of T 
T D[N];  // D is an array of T 
T D();  // D is a function returning T 

T *D;  // D is a *pointer* to T 
T *D[N]; // D is an array of pointers to T 
T *D();  // D is a function returning a pointer to T 

T (*D)[N]; // D is a pointer to an array of T 
T (*D)(); // D is a pointer to a function returning T 

在這兩種聲明和表達式,後綴[]下標和()函數調用運營商具有比一元更高的優先級*,因此*a[N]將始終被解析爲*(a[N])(指針數組)。若要將指針指向數組或將指針指定爲函數,則需要使用圓括號將聲明符號明確分組爲*運算符。

聲明符可以得到任意複雜:

T (*D())[N];  // D is a function returning a pointer to an array of T 
T (*D[N])();  // D is an array of pointers to functions returning T 
T *(*(*D)[N])[M]; // D is a pointer to an array of pointers to an array of pointers to T