访问/使用c中的void指针时出错

时间:2013-11-16 01:04:14

标签: c pointers linked-list void

所以我有这个链接列表打印功能给我错误:

error: invalid use of void expression

以下是导致此错误的行:

printf("[%d] -> ", *(link->pointer)); /*note: i tried to cast it to (int) but still     same error. */

这是我链接的结构;非常直截了当:

typedef struct DLLNode {
    void * pointer;
    struct DLLNode *next;
    struct DLLNode *previous;
} DLLNode;

我正在使用我的前置功能:

...
int j = 2;
prepend(&j, list);
...

以便它使用指向变量2的指针作为struct在新DLLNode中存储的值作为指针。

有人能告诉我为什么会这样,这意味着什么?谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

我想您正在尝试打印link->pointer指向的值。
printf("[%d] -> ", var)期望在其参数列表中看到一个整数或可以转换为它的东西(例如,一个字符)。

link->pointer的类型为void *,在解除引用后,它看起来像void类型变量。因此,编译器无法将*(link->pointer)转换为int类型。要告诉它你实际上在void *指针后面保留一个整数值,你需要显式地将link->pointer转换为int *类型,正如Kaz在注释中指出的那样,然后才取消引用它。我希望以下代码更清楚地说明这一点:

DLLNode *list;
// initialization and other stuff

void *p = list->pointer;
int *p_i;
p_i = (int*)p; // explicit cast to int*

// print the integer value pointed to by the list->pointer
printf("[%d] -> ", *p_i);