Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-包含链表的数组_C_Arrays_Pointers_Multidimensional Array_Linked List - Fatal编程技术网

C-包含链表的数组

C-包含链表的数组,c,arrays,pointers,multidimensional-array,linked-list,C,Arrays,Pointers,Multidimensional Array,Linked List,我想这个问题现在得到了很多方面的回答,但我仍然很困惑,我正在用指针做一些奇怪的事情,所以我非常感谢你们的帮助。 我想创建一个包含链表的数组(大小未知)。 我认为主要的问题是我在这种情况下使用指针。 请看一看: int x_format; int y_format; typedef struct{ int id; struct item_node *next; union{ struct{ int freq } Sou

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

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);
}
我理解这个错误,但我现在不知道如何修复它。 对不起,如果这个问题是琐碎的方式,我感谢任何帮助!
谢谢。

我非常确定您的项节点数据类型不是指针,而是结构。然而,在突出显示的行中,您将这种结构的一个示例与void指针进行比较(稍后再进行其他操作),这是一个错误。显然,其意图如下:

1)
item\u节点*createItem(int x,int y,int id)


2)
item_node*selected=房间[x][y]

我非常确定您的项节点数据类型不是指针,而是结构。然而,在突出显示的行中,您将这种结构的一个示例与void指针进行比较(稍后再进行其他操作),这是一个错误。显然,其意图如下:

1)
item\u节点*createItem(int x,int y,int id)


2)
item_node*selected=房间[x][y]

我非常确定您的项节点数据类型不是指针,而是结构。然而,在突出显示的行中,您将这种结构的一个示例与void指针进行比较(稍后再进行其他操作),这是一个错误。显然,其意图如下:

1)
item\u节点*createItem(int x,int y,int id)


2)
item_node*selected=房间[x][y]

我非常确定您的项节点数据类型不是指针,而是结构。然而,在突出显示的行中,您将这种结构的一个示例与void指针进行比较(稍后再进行其他操作),这是一个错误。显然,其意图如下:

1)
item\u节点*createItem(int x,int y,int id)


2)
item_node*selected=房间[x][y]

关于主题,问题就在这里:

item_node createItem (int x, int y, int id){
   item_node selected = room[x][y];
   //Error
   if(selected == NULL)
      selected = malloc(sizeof(item_node));
在您的情况下,所选的项_节点是一个变量,而不是指针。您已将selected声明为item_节点的变量,该节点是一个结构。这里没有指针。 然后将某一类型的变量与NULL(在普通C中定义为(void*)0)进行比较

离题:
不过,乍一看,整个计划似乎有缺陷。请修改算法和数据结构,在我看来,您正在自由地混合指针和数组。

关于主题,问题就在这里:

item_node createItem (int x, int y, int id){
   item_node selected = room[x][y];
   //Error
   if(selected == NULL)
      selected = malloc(sizeof(item_node));
在您的情况下,所选的项_节点是一个变量,而不是指针。您已将selected声明为item_节点的变量,该节点是一个结构。这里没有指针。 然后将某一类型的变量与NULL(在普通C中定义为(void*)0)进行比较

离题:
不过,乍一看,整个计划似乎有缺陷。请修改算法和数据结构,在我看来,您正在自由地混合指针和数组。

关于主题,问题就在这里:

item_node createItem (int x, int y, int id){
   item_node selected = room[x][y];
   //Error
   if(selected == NULL)
      selected = malloc(sizeof(item_node));
在您的情况下,所选的项_节点是一个变量,而不是指针。您已将selected声明为item_节点的变量,该节点是一个结构。这里没有指针。 然后将某一类型的变量与NULL(在普通C中定义为(void*)0)进行比较

离题:
不过,乍一看,整个计划似乎有缺陷。请修改算法和数据结构,在我看来,您正在自由地混合指针和数组。

关于主题,问题就在这里:

item_node createItem (int x, int y, int id){
   item_node selected = room[x][y];
   //Error
   if(selected == NULL)
      selected = malloc(sizeof(item_node));
在您的情况下,所选的项_节点是一个变量,而不是指针。您已将selected声明为item_节点的变量,该节点是一个结构。这里没有指针。 然后将某一类型的变量与NULL(在普通C中定义为(void*)0)进行比较

离题:
不过,乍一看,整个计划似乎有缺陷。请修改算法和数据结构,在我看来,您正在自由地混合指针和数组。

选择的
类型不是指针。BTW
typedef struct{
shouuld是
typedef struct item_节点{
type of
selected
不是指针。BTW
typedef struct{
shouuld是
typedef struct item_节点{
type of
selected
不是指针。BTW
typedef struct{
shouuld是
typedef struct节点{
type of
selected
不是指针。顺便说一句,typedef struct{
应该是
typedef struct item_节点{
非常感谢你的帮助!帮助了很多!非常感谢你的帮助!帮助了很多!非常感谢你的帮助!帮助了很多!非常感谢你的帮助!帮助了很多!谢谢,是的,你是对的,我是C新手,但我想有时候你只需要尝试一下,看到那些有才华的人真是太好了你愿意帮助:)谢谢,是的,你是对的,我是C语言的新手,但我认为有时你必须尝试一些东西,看到有才能的人愿意帮助我是很好的:)谢谢,是的,你是对的,我是C语言的新手,但我认为有时你必须尝试一些东西,看到有才能的人愿意帮助我是很好的:)T汉克斯,是的,你是对的,我是C语言的新手,但我觉得有时候你只需要尝试一下,看到有才华的人愿意帮助你,真是太好了:)