これをCで実行しようとすると、クラッシュします。
int nValue=1;
void* asd;
asd[0]=&nValue;
次のエラーが発生します。
*error C2036: 'void**' *: unknown size
error C2100: illegal indirection*
Cでvoidポインタを配列として使用できますか?
そして、可能であれば、そうするための正しい方法は何ですか?
これをCで実行しようとすると、クラッシュします。
int nValue=1;
void* asd;
asd[0]=&nValue;
次のエラーが発生します。
*error C2036: 'void**' *: unknown size
error C2100: illegal indirection*
Cでvoidポインタを配列として使用できますか?
そして、可能であれば、そうするための正しい方法は何ですか?
Cでvoidポインタを配列として使用できますか?
いいえ。との間で変換することはできvoid*
ますが、それを推測することはできません。それについて考えると、それは理にかなっています。
不明なタイプを指しているため、サイズも不明です。asd[0]
したがって、ベースポインタからオフセットするバイト数も、書き込むバイト数もわからないため、ポインタ演算を実行できない可能性があります(これが実行されます)。
ちなみに、初期化されていないため、asd
(おそらく)無効なメモリを指しています。書き込みまたは読み取りは、未定義の動作を引き起こします。
次のように書くことができます:
int main()
{
int iv = 4;
char c = 'c';
void *pv[4];
pv[0] = &iv;
pv[1] = &c;
printf("iv =%d, c = %c", *(int *)pv[0], *(char *)pv[1]);
return 0;
}