5

void-Pointers の配列があり、要素にアクセス (初期化) したいのですが、うまくいきません:

void* anyptr = ...; //a pointer to something
void* arr = (void*)malloc(sizeof(void*)*10);

int i=0;
for(i=0; i<10; i++)
   *(arr+i) = anyptr; //dont work, (arr+n) = anyptr; doesn´t work too

これが機能しない理由は、左側が要素 i の結果であるためだと思います。しかし、私はこれを行う方法がわかりません

4

3 に答える 3

12

この行を変更する必要があります

void* arr = (void*)malloc(sizeof(void*)*10);

これに

void** arr = malloc(sizeof(void*)*10);
于 2013-04-20T19:06:58.983 に答える
2

void ポインターを逆参照することはできません。これが void ポインタの要点です。ポインターを逆参照すると、ポインターが指すアドレスにある項目にアクセスできます。ただし、void ポインターを使用すると、ターゲット オブジェクトがどのくらい大きいかわかりません (1B 文字ですか、それとも 100B 構造体ですか?)。逆参照する前に、特定のポインター型にキャストする必要があります。

整数iをポインターに加算 (または減算) することは、ポインターの内容に i 倍の sizeof(*pointer) を加算することとして定義されます。( sizeof(*pointer) は、ポインターに特定の型がある場合にのみ指定できます。void ポインターを使用したポインター演算は意味がありません)。

(arr+n)= anyptr; に関しては、arr+n は単なるアドレスです。何かを割り当てることができる値ではありません(左辺値ではありません)。

于 2013-04-20T19:15:35.490 に答える