如何在c中初始化和使用2d结构

如何在c中初始化和使用2d结构,c,struct,2d,C,Struct,2d,所以我要做的是创建一个列表数组,下面是我的代码: typedef struct stackList{ List * list; } stack; int main(){ int x; stack ** stackTable; for(x=0;x<100;x++) stackTable[x]=malloc(sizeof(stack*)*100); } typedef结构堆栈列表{ 列表*列表; }堆叠; int main(){ int

所以我要做的是创建一个列表数组,下面是我的代码:

typedef struct stackList{
    List * list;
} stack;

int main(){
    int x;
    stack ** stackTable;

    for(x=0;x<100;x++) 
        stackTable[x]=malloc(sizeof(stack*)*100);
}
typedef结构堆栈列表{
列表*列表;
}堆叠;
int main(){
int x;
堆栈**堆栈表;

对于(x=0;x,在尝试使用指针和动态内存之前,我可能建议使用基本2d数组编写一些基本程序。例如:

char array2d[10][10];

一旦你可以将元素插入这个数组、提取元素等,你就可以将所有相同的原则应用到任何类型。

你会遇到分段错误,因为你在堆栈表未初始化时访问它。你不知道它指向内存的哪个地址,而且你还没有分配一个数组来保存指针至少,您正在取消引用

您需要使stackTable指向一个有效的指针数组,在这种情况下,我认为将其设置为数组比较方便:

Stack* stackTable[100];
现在有了指向堆栈的指针数组,可以对它们进行初始化

如果您只是暂时拥有一个大100的阵列,并且您需要使其在将来增长,那么动态分配它的方式就是这样:

Stack** stackTable= malloc(100*sizeof(Stack*));

stackTable不引用任何地方,而您正在for循环中使用它。我很乐意这样做,我想我得到了我需要的东西。我将结构更改为:typedef struct stackList{List*List;List*nextList;}stack;@s.brookes虽然这可能是一个有用的建议,但你的回答应该是一个注释。@Armin Gotchya。对此很抱歉。如果我必须增加堆栈的大小,我是否需要增加数组的大小,你应该使用动态分配。我编辑了这个问题以添加一个示例。