2016-08-24 2 views
1

Ich habe diese Signatur einer Funktion:Clone void * Zeiger auf int

void* cloneInt(const void* i); 

Diese int stellt einen Schlüssel für eine Hash-Funktion. Ich muss diese Klonfunktion wie in meiner API für eine generische Implementierung einer Hash-Tabelle haben (diese Funktion ist ein Teil der int-Implementierung, diese Funktion wird als Zeiger auf eine Funktion weitergeleitet, die meine generische Implementierung verwenden wird) . Aber ich habe ein Problem zu verstehen: Wie können Sie eine int klonen? Ich muss einen Zeiger zurückgeben, der auf den gleichen Wert von int zeigt, aber einen anderen Ort im Speicher. Das hat mich sehr verwirrt.

+1

Sie weisen Speicher für einen 'int' und zu speichern' * I' da? – GSerg

+0

Funktioniert das? void * cloneInt (const void * i) { int meinInt = (int *) malloc (sizeof (int)); myInt = * i; return &myInt; } – Eyzuky

+0

Nein, es wird nicht, Sie müssen 'int * myInt' erstellen, und Sie müssen es mit '* myInt = * i' zuweisen. – GSerg

Antwort

5

Dies funktioniert:

#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); 
} 
Verwandte Themen