功能声明C的区别

时间:2013-03-28 15:51:50

标签: c pointers function-pointers

如果我声明这样的函数,那么C是否存在差异:

Type * AK_init_observer();

并且像这样:

Type* *AK_init_observer();

4 个答案:

答案 0 :(得分:4)

是的,退货类型不同。第一个返回指向Type的指针,而第二个返回指向Type的指针。

答案 1 :(得分:3)

是的,有区别。

  • 在第一种情况下,AK_init_observer会返回指向TypeType *)的指针。
  • 在第二种情况下,AK_init_observer返回指向TypeType **)指针的指针。

由于空格在这里无关紧要,因此两个声明等同于:

Type *AK_init_observer();

Type **AK_init_observer();

参考

  

C11(n1570),§5.1.1.1程序结构

     

7)分隔标记的空白字符不再重要。

答案 2 :(得分: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);

答案 3 :(得分:0)

是的,在第二个上你返回一个指向指针的指针。例如:

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


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