不確定標題是否解釋它。是什麼區別:在其聲明中帶有指針的函數。爲什麼?
char *s_gets(char * st, int n);
和
char s_gets(char * st, int n);
我還想請問爲什麼會出現在首位的函數聲明的指針?它的目的是什麼?
不確定標題是否解釋它。是什麼區別:在其聲明中帶有指針的函數。爲什麼?
char *s_gets(char * st, int n);
和
char s_gets(char * st, int n);
我還想請問爲什麼會出現在首位的函數聲明的指針?它的目的是什麼?
char s_gets(char * st, int n);
返回一個字符,就是這樣。char *s_gets(char * st, int n);
返回一個指向一個字符的指針,如果它是程序員的意願,它可以被解釋爲指向字符串的指針。'char *'不是一個字符串,它可能是一個字符串的指針 –
@KeithThompson爲什麼我說它可以被解釋爲一個,如果它是程序員想要的。編輯:好吧,得到你的意思,謝謝 –
體面的回答一個廢話的問題 –
char *s_gets(char * st, int n);
指針返回到char
,而
char s_gets(char * st, int n);
返回一個普通char
。
我想問一下爲什麼函數聲明中有一個指針呢?它的目的是什麼?
它表示該函數返回一個指針的值。
C聲明語法使用稱爲聲明者的東西來傳達項目的指針性,數組性,功能性或其組合。例如,採取聲明
int *p;
的類型的p
是int *
(指針int
)。類型由類型說明符int
和聲明者*p
的組合指定。 p
的int
的性質由類型說明符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
[說明可以在這裏找到(http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) –
你還會從函數返回一個指針嗎? – Olaf
@Olaf帶**參數? –