我正在使用链接列表。这些是我与之合作的结构:
// 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){
我意识到将struct与int进行比较是无效的。我的问题是:
为什么比较解除引用的指针不起作用,即使printf("%i",*(list->tail))
将其打印出来?这只是方式' C'工作
有解决方法吗?
我知道这个问题已经回答here,但我不太清楚他们是如何将struct变量与int进行比较的。提前谢谢。
答案 0 :(得分:0)
错误:二进制表达式的操作数无效(' element_t'(又名' struct element')和' int')
此错误表示您尝试将element_t
与int
进行比较,但由于它们不能相互比较,因此没有任何意义。
为什么比较解除引用的指针不起作用,即使
printf("%i",*(list->tail))
将其打印出来?这只是方式' C'作品?
我不认为printf("%i",*(list->tail))
应该有效,因为这样会将element_t
投放到int
,这是没有意义的。这些都是有意义的。
printf("%i",list->tail->val);
printf("%p",list->tail);
有解决方法吗?
这不是你想要的吗?
list_t *list;
// ...
if(list->tail->val == i){
//do something;
}
您可以获得列表tail
,然后获得tail
val
。