0

これをCで実行しようとすると、クラッシュします。

int nValue=1;   
void* asd;  
asd[0]=&nValue;

次のエラーが発生します。

*error C2036: 'void**' *: unknown size  
error C2100: illegal indirection*

Cでvoidポインタを配列として使用できますか?

そして、可能であれば、そうするための正しい方法は何ですか?

4

2 に答える 2

3

Cでvoidポインタを配列として使用できますか?

いいえ。との間で変換することはできvoid*ますが、それを推測することはできません。それについて考えると、それは理にかなっています。

不明なタイプを指しているため、サイズも不明です。asd[0]したがって、ベースポインタからオフセットするバイト数も、書き込むバイト数もわからないため、ポインタ演算を実行できない可能性があります(これが実行されます)。

ちなみに、初期化されていないため、asd(おそらく)無効なメモリを指しています。書き込みまたは読み取りは、未定義の動作を引き起こします。

于 2012-09-14T00:17:58.603 に答える
0

次のように書くことができます:

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;
}
于 2012-09-14T00:49:14.640 に答える