如果我声明这样的函数,那么C是否存在差异:
Type * AK_init_observer();
并且像这样:
Type* *AK_init_observer();
答案 0 :(得分:4)
是的,退货类型不同。第一个返回指向Type
的指针,而第二个返回指向Type
的指针。
答案 1 :(得分:3)
是的,有区别。
AK_init_observer
会返回指向Type
(Type *
)的指针。AK_init_observer
返回指向Type
(Type **
)指针的指针。由于空格在这里无关紧要,因此两个声明等同于:
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