函数在其声明中带有指针。为什么?

时间:2016-09-07 20:58:31

标签: c pointers

不确定标题是否解释了它。有什么区别:

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

char s_gets(char * st, int n);

我想问一下为什么首先在函数声明中有一个指针?它的目的是什么?

2 个答案:

答案 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])