【发布时间】:2013-03-28 15:51:49
【问题描述】:
如果我这样声明函数,C语言有什么不同:
Type * AK_init_observer();
像这样:
Type* *AK_init_observer();
【问题讨论】:
-
是的,第二个返回一个双指针(
Type**)
标签: c pointers function-pointers
如果我这样声明函数,C语言有什么不同:
Type * AK_init_observer();
像这样:
Type* *AK_init_observer();
【问题讨论】:
Type**)
标签: c pointers function-pointers
是的,返回类型不同。第一个返回指向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
【讨论】:
char *。