次のように関数を宣言すると、Cに違いはありますか:
Type * AK_init_observer();
そしてこのように:
Type* *AK_init_observer();
次のように関数を宣言すると、Cに違いはありますか:
Type * AK_init_observer();
そしてこのように:
Type* *AK_init_observer();
はい、戻り値の型が異なります。1 つ目は へのポインタをType
返しますが、2 つ目は へのポインタへのポインタを返しますType
。
はい、違いがあります。
AK_init_observer
へのポインターを返します。Type
Type *
AK_init_observer
へのポインターへのポインターを返します。Type
Type **
ここではスペースは問題にならないため、2 つの宣言は次と同等です。
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);
はい、2番目のものでは、ポインターへのポインターを返しています。例えば:
char *function(); // Returns a pointer to a char - or a 'string'
char **function(); // Returns an array of strings