在C中将*取消为char或int

时间:2017-02-04 10:12:19

标签: c int malloc structure void-pointers

我想在我的代码中获取任何类型的变量,所以我做了一个void *类型来接受其他人。但是我可以使用char *而不是int值。而且我不明白我是如何做到的。 这是我的代码:

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;
};

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

OK!在函数 void insertion(t_liste *liste, void *newValue) 中,您正在使用void *类型的参数。在第一种情况下,当您发送字符串(char *)时,将传递字符串的基址,因此地址将被转移到newValue,但是如果您传递一个数字,例如5,则将整数传递给{ {1}}它需要一个地址。