-3

如果我声明这样的函数,C 是否有区别:

Type * AK_init_observer();

像这样:

Type* *AK_init_observer();
4

4 回答 4

4

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

于 2013-03-28T15:53:11.290 回答
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) 分隔标记的空白字符不再重要。

于 2013-03-28T15:52:37.437 回答
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);
于 2013-03-28T15:56:09.413 回答
0

是的,在第二个中,您将返回指向指针的指针。例如:

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


char **function();            // Returns an array of strings
于 2013-03-28T15:54:40.853 回答