【问题标题】:C - Array containing Linked ListsC - 包含链表的数组
【发布时间】:2015-08-04 08:44:42
【问题描述】:

我认为这个问题现在已经在很多方面得到了回答,但我仍然很困惑,而且我正在用指针做奇怪的事情,所以我非常感谢你的帮助。 我想创建一个包含链表的数组(未知大小)。 我认为主要问题是我在这种情况下使用指针。 请看:

int x_format;
int y_format;
typedef struct{
    int id;
    struct item_node *next;
    union{
        struct{
            int freq
        } Sound;
        struct{
            float reduce;
        } Obstacle;
    } data;
}item_node;
item_node *buffer;
item_node **room;
item_node **room_new;

void createRoom(int x, int y)
{
    buffer = malloc(sizeof(item_node)*x*y);
    room = malloc(sizeof(item_node *)*y);
    for(int i = 0; i<y; i++)
    room[i] = &buffer[i*x];
    for(int j = 0; j<x; ++j)
    {
        for(int k = 0; k<y; ++k)
        {
             room[j][k].next = NULL;
        }
    }
}
item_node createItem (int x, int y, int id)
{
    item_node selected = room[x][y];
    //Error
    if(selected == NULL)
        selected = malloc(sizeof(item_node));
    else{
        while(selected->next != NULL)
            selected = selected->next;

        selected->next = malloc(sizeof(item_node));
        selected = selected->next;
    }

    selected->id = id; 
    selected->next = NULL;
    return selected;
}
int main (int argc, char *argv[])
{
    x_format = 100;
    y_format = 100;

    createRoom(x_format,y_format);
    item_node itemtest = createItem(1,1,0);
    free(room);
    free(buffer);
}

所以出现的问题是:

error: invalid operands to binary expression ('item_node' and 'void *') if(selected == NULL)

我了解错误,但我现在不知道如何解决。 对不起,如果这个问题是微不足道的,我很感激任何帮助! 谢谢。

【问题讨论】:

  • selected 的类型不是指针。顺便说一句typedef struct{ 应该是typedef struct item_node {

标签: c arrays pointers multidimensional-array linked-list


【解决方案1】:

正题,问题就在这里:

item_node createItem (int x, int y, int id){
   item_node selected = room[x][y];
   //Error
   if(selected == NULL)
      selected = malloc(sizeof(item_node));

在你的情况下 item_node selected 是一个变量,而不是一个指针。您将 selected 声明为 item_node 的变量,它是一个结构。这里没有指针。 然后,您将某个类型的变量与 NULL(在普通 C 中定义为 (void*) 0)进行比较。

题外话: 不过,整个程序乍一看似乎有缺陷。请修改算法和数据结构,在我看来您将指针和数组混合得有点随意。

【讨论】:

  • 谢谢,是的,你是对的,我是 C 新手,但我认为有时你只需要尝试一下,很高兴看到有才华的人愿意提供帮助 :)
【解决方案2】:

我很确定您的 item_node 数据类型不是指针,而是结构。但是,在突出显示的行中,您将此类结构的示例与 void 指针进行比较(稍后再做其他事情),这是一个错误。显然,这是为了:

1) item_node* createItem (int x, int y, int id)

2) item_node* selected = room[x][y];

【讨论】:

  • 非常感谢您的帮助!帮了大忙!
猜你喜欢
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
相关资源
最近更新 更多