-3

次のように関数を宣言すると、Cに違いはありますか:

Type * AK_init_observer();

そしてこのように:

Type* *AK_init_observer();
4

4 に答える 4

4

はい、戻り値の型が異なります。1 つ目は へのポインタをType返しますが、2 つ目は へのポインタへのポインタを返しますType

于 2013-03-28T15:53:11.290 に答える
3

はい、違いがあります。

  • 最初のケースでは、 ( )AK_init_observerへのポインターを返します。TypeType *
  • 2 番目のケースでは、 ( )AK_init_observerへのポインターへのポインターを返します。TypeType **

ここではスペースは問題にならないため、2 つの宣言は次と同等です。

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

はい、2番目のものでは、ポインターへのポインターを返しています。例えば:

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


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