所以我有这个链接列表打印功能给我错误:
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中存储的值作为指针。
有人能告诉我为什么会这样,这意味着什么?谢谢你的时间。
答案 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);