如果我声明这样的函数,C 是否有区别:
Type * AK_init_observer();
像这样:
Type* *AK_init_observer();
如果我声明这样的函数,C 是否有区别:
Type * AK_init_observer();
像这样:
Type* *AK_init_observer();
是的,返回类型不同。第一个返回指向 的指针Type
,而第二个返回指向 的指针Type
。
是,有一点不同。
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) 分隔标记的空白字符不再重要。
使用众所周知的类型(例如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);
是的,在第二个中,您将返回指向指针的指针。例如:
char *function(); // Returns a pointer to a char - or a 'string'
char **function(); // Returns an array of strings