2017-02-04 5 views
-1

Я хочу получить любые переменные в моем коде, поэтому я использовал тип void * для принятия других. Но я могу получить char *, но не в значениях int. И я не понимаю, как я могу это сделать. Вот мой код:Void * to char или int in C

void insertion(t_liste *liste, void *newValue) { 
    t_element *new = malloc(sizeof(void *)); 
    int i; 
    int *j = &i; 

    if (liste == NULL || new == NULL) { 
    exit(EXIT_FAILURE); 
    } 
    if (newValue == j || (char *)newValue) { 
    new->value = newValue; 
    new->suivant = liste->premier; 
    liste->premier = new; 
    liste->taille++; 
    new->index = liste->taille; 
    } 
} 

В моей основной я

insertion(maListe, 5); 

он не работает, но если бы я сделал это:

insertion(maListe, "test"); 

Он работает. Но я хочу обе работы! Вот мой .h

typedef struct s_element t_element; 
typedef struct s_liste t_liste; 

struct s_element{ 
    int   index; 
    void   *value; 
    t_element  *suivant; 
    t_element  *precedent; 
}; 

struct s_liste{ 
    t_element  *premier; 
    t_element  *dernier; 
    int   taille; 
}; 

Любая идея?

+2

Использование 'new' в качестве имени переменной - это не очень хорошая идея. –

+7

@ EdHeal - отличная идея, означает, что идиоты, которые думают« использовать компилятор C++ для компиляции c-кода », являются хорошей идеей, на самом деле в конечном итоге теряют время –

+5

'void *' - указатель на любой тип. '5' не является указателем, а числом. Числа не являются указателями. – Gerhardh

ответ

0

OK! В вашей функции void insertion(t_liste *liste, void *newValue) вы принимаете аргумент типа void *. В первом случае, когда вы отправляете строку (char *), передается базовый адрес строки, поэтому адрес берется в newValue, но в случае, если вы передаете число, скажем 5, целое число передается в newValue, где оно ожидает адрес.