将struct元素与c中的整数进行比较

时间:2017-07-12 02:47:32

标签: c list struct linked-list

我正在使用链接列表。这些是我与之合作的结构:

// 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进行比较是无效的。我的问题是:

  1. 为什么比较解除引用的指针不起作用,即使printf("%i",*(list->tail))将其打印出来?这只是方式' C'工作

  2. 有解决方法吗?

  3. 我知道这个问题已经回答here,但我不太清楚他们是如何将struct变量与int进行比较的。提前谢谢。

1 个答案:

答案 0 :(得分:0)

  

错误:二进制表达式的操作数无效(' element_t'(又名' struct element')和' int')

此错误表示您尝试将element_tint进行比较,但由于它们不能相互比较,因此没有任何意义。

  

为什么比较解除引用的指针不起作用,即使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