2016-08-24 5 views
1

をintに私は機能のこの署名を持っている:クローンvoid *型のポインタ

void* cloneInt(const void* i); 

このintは、ハッシュ関数のキーを表します。私はハッシュテーブルの一般的な実装(この関数はint実装の一部であり、この関数は汎用の実装で使用される関数へのポインタとして転送される)のAPIにあるので、このクローン関数を持つ必要があります。 。 問題を理解しています:intをどのようにクローンできますか? intという同じ値を指すポインタを返す必要がありますが、メモリ内の別の場所です。これは私を非常に混乱させました。

+1

あなたはそこ 'int'とストア' * i'にメモリを割り当てますか? – GSerg

+0

これは動作しますか? void * cloneInt(const void * i) { int myInt =(int *)malloc(sizeof(int)); myInt = * i; return &myInt; } – Eyzuky

+0

いいえ、あなたは 'int * myInt'を作成する必要があり、' * myInt = * i 'を割り当てる必要があります。 – GSerg

答えて

5

これは動作します:

#include <stdio.h> 
#include <stdlib.h> 

void* cloneInt(const void* i) 
{ 
    int *myInt = malloc(sizeof(int)); 
    *myInt = *(int*)i; 
    return myInt; 
} 

int main(int argc, char** argv) 
{ 
    int i=10; 
    int *j; 
    j = cloneInt(&i); 
    printf("j: %d i: %d\n", *j, i); 
    free(j); 
} 
関連する問題