gccで次のことが許可されているのはなぜですか?
void **p1, **p2;
p1=*p2;
しかし、これは「互換性のないポインタ型からの割り当て」エラーを生成しますか?
char **p1, **p2;
p1=*p2;
gccで次のことが許可されているのはなぜですか?
void **p1, **p2;
p1=*p2;
しかし、これは「互換性のないポインタ型からの割り当て」エラーを生成しますか?
char **p1, **p2;
p1=*p2;
は、ジェネリック (データ) ポインター型*p2
である typevoid *
であるためです。つまり、任意のデータ ポインター型を type のポインターに割り当てることができ、任意の型のデータ ポインターに a を割り当てることもできます。そうvoid *
void *
(some void **) = (some void *);
有効です。
ただし、char **
とchar *
は異なる型へのポインターであり、どちらも ではvoid *
ないため、別の型に割り当てることはできません。
必要なもの:
char **p1, **p2;
/* Make sure p2 has a valid value (i.e. points to a valid memory location) before the following statement */
p1=p2;
void**
が割り当てられている間に機能する理由void*
は、void ポインターが任意のものを指すことができるためです。