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 ポインターが任意のものを指すことができるためです。