我正在使用链表。这些是我正在使用的结构:
// List element: a list is a chain of these
typedef struct element
{
int val;
struct element* next;
} element_t;
// List header - keep track of the first and last list elements
typedef struct list
{
element_t* head;
element_t* tail;
} list_t;
我需要做一些类似的事情:
int i = 5;
if(*(list->tail) == i){
//do something;
}
我知道*(list->tail)
取消引用指针并返回列表中的最后一个元素,但是我不断收到此错误:
error: invalid operands to binary expression ('element_t' (aka 'struct element') and 'int')
if(*(list->tail) != i){
我意识到将结构与 int 进行比较是无效的。我的问题是:
为什么比较取消引用的指针不起作用,即使
printf("%i",*(list->tail))
打印出来?这就是"C"的工作方式吗?有没有办法解决这个问题?
我知道这个问题已经在这里得到了回答,但我不太明白他们如何将结构变量与 int 进行比较。 提前谢谢。
错误:二进制表达式的操作数无效("element_t"(又名"结构元素"(和"int"(
此错误意味着您正在尝试将element_t
与int
进行比较,这没有任何意义,因为它们彼此不具有可比性。
为什么比较取消引用的指针不起作用,即使
printf("%i",*(list->tail))
打印出来?这就是"C"的工作方式吗?
我认为printf("%i",*(list->tail))
不应该起作用,因为这会给int
带来element_t
,这是没有意义的。这两种说法都说得通。
printf("%i",list->tail->val);
printf("%p",list->tail);
有没有办法解决这个问题?
这不是你想要的吗?
list_t *list;
// ...
if(list->tail->val == i){
//do something;
}
你得到列表的tail
,然后你得到tail
的val
。