2016-08-24 68 views
1

我有一個函數的這個簽名:克隆無效*指針爲int

void* cloneInt(const void* i); 

int表示散列函數的關鍵。我需要這個克隆函數,因爲它在我的API中用於散列表的通用實現(該函數是int實現的一部分,該函數將作爲指向我的通用實現將使用的函數的指針) 。 但我有一個問題的理解:你如何克隆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); 
}