C-如何制作一系列结构



我对如何制作结构数组感到困惑。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct line
{
   int x;
} *line;
int main()
{
    line *array = malloc(10 * sizeof(line));
    int i = 0;
    for(i; i < 2; i++)
    {
        array[i]->x = 5;
    }
    for(i; i < 2; i++)
    {
        printf("%dn", array[i]->x);
    }
    return 0;
}

我的混乱来自以下内容:从我的理解中,如果您有一个Typedef并将其命名为指针EG *行,则可以使用 ->符号访问和突变结构中的每个项目。我似乎不正确,不确定为什么。

我的错误:

分割故障(核心倾倒)

typedef line是指向结构的指针,而不是结构本身。因此,当您基于sizeof linemalloc -ED时,您可以获得十个指针的空间,而不是结构的十本。在typedef中的line之前卸下*,因此您会得到一系列结构,而不是(未分配的)指针到struct。然后,您将在索引指针后使用普通的点访问。

如果您实际上想要一系列指针构造,则需要单独分配每个结构,这可能不是您想要的。

在这里,将其修复为ya:

#include <stdio.h>
#include <stdlib.h>
typedef struct line
{
   int x;
} Line;
int main()
{
    Line* array = malloc(10 * sizeof(line));
    int i = 0;
    for(i; i < 2; i++)
    {
        array[i].x = 5;
    }
    for(i; i < 2; i++)
    {
        printf("%dn", array[i].x);
    }
    return 0;
}

您几乎拥有它,您只需要调整语法或为每个结构分配更多内存:

#include <stdio.h>
#include <stdlib.h>
typedef struct line
{
   int x;
} *line;
int main()
{
    line *array = malloc(10 * sizeof(line));
    int i = 0;
    for(i; i < 2; i++)
    {
        // XXX HERE YOU ALLOCATE MORE MEMORY
        array[i] = malloc(sizeof array[i]);
        array[i]->x = 5;
    }
    // XXX RESET "i" TO ZERO
    for(i=0; i < 2; i++)
    {
        printf("%dn", array[i]->x);
    }
    return 0;
}

您再也不会重置i数组索引变量。

相关内容

  • 没有找到相关文章