1

この結果がわかりません...

コード:

void foo(void * key, size_t key_sz) {
    HashItem *item = malloc(sizeof(HashItem));

    printf("[%d]\n", (int)key);

    ...

    item->key = malloc(key_sz);
    memcpy(item->key, key, key_sz);
}

void bar(int num) {
    foo(&num, sizeof(int));
}

そして、私はこの呼び出しを行います:bar(900011009);

しかし、printf()出力は次のとおりです。

[-1074593956]

私は本当にkeyvoidポインタである必要があります、どうすればこれを修正できますか?

4

2 に答える 2

4

私はあなたがこれを必要とすると思います:

printf("[%d]\n", *(int*)key); 

キーはintへのvoidポインターであるため、最初にintポインターにキャストし、次に逆参照して元のintを取得する必要があります。

于 2010-04-07T00:21:12.340 に答える
2

ポインタを にキャストすると、アドレスintが値として取得されます。void ポインターは、他のポインターと同様に逆参照する必要があります。を直接逆参照することはできないため、最初に正しい型のポインター here にキャストする必要があります。次に、そのポインターを逆参照します。つまり、優先順位を明確にするために括弧を追加します。void *int **((int *)key)

于 2010-04-07T00:28:51.840 に答える