不确定标题是否解释了它。有什么区别:
char *s_gets(char * st, int n);
和
char s_gets(char * st, int n);
我想问一下为什么首先在函数声明中有一个指针?它的目的是什么?
答案 0 :(得分:4)
char s_gets(char * st, int n);
会返回一个字符,就是全部。char *s_gets(char * st, int n);
返回一个指向字符的指针,如果它是程序员的意愿,可以将其解释为指向字符串的指针。答案 1 :(得分:1)
char *s_gets(char * st, int n);
返回指向char
的指针,而
char s_gets(char * st, int n);
返回普通char
。
我想问一下为什么首先在函数声明中有一个指针?它的目的是什么?
表示该函数返回指针值。
C声明语法使用称为声明符的东西来传达项目的指针,数组,函数或其组合。例如,参加声明
int *p;
p
的类型是int *
(指向int
的指针)。类型由类型说明符int
和声明符 *p
的组合指定。 int
的{{1}} - ness由类型说明符p
给出,指针-nss由声明符int
给出。
如果您将*p
替换为p
,则会获得
f(void)
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
下标和[]
函数调用运算符的优先级高于一元()
,因此*
将始终被解析为{ {1}}(指针数组)。要将某些内容声明为指向数组的指针 或指向函数的指针,您需要使用括号将*a[N]
运算符与声明符显式分组。
声明者可以任意复杂:
*(a[N])