C中二维数组的结构 – 如何声明和使用

我一直试图用一个非常简单的想法在C中工作,但我甚至无法理解语法。
该程序将从命令行获取一些输入,并使用它们来决定制作二维结构数组的大小。

然后,在for循环类型的情况下,我希望能够根据用户输入更改特定的unsigned char。 所以首先我构建一个2D结构数组,每个结构包含一个无符号字符数组以及一个名称,然后我就可以写入这些结构。

命令行参数是三个字符串。 First one is number of rows, second one is number of columns, third one is size of unsigned char array within each struct.

 #include #include #include #include #include typedef struct { unsigned char* Data; char* name; } myStruct; myStruct* myArr[][]; int main(int argc, char *argv[]) { int y = atoi(argv[0]); int x = atoi(argv[1]); int z = atoi(argv[2]); myStruct* myArr[x][y]; for (int i = 0; i < x; i++) { for(int j = 0; j < y; j++) { myArr[i][j]=(myStruct*) malloc(sizeof(myStruct)); myArr[i][j].Data=(unsigned char*) malloc(sizeof(unsigned char)*z); myArr[i][j].name = (char*) malloc(sizeof(char)*64); } } //part II - change some entry of myArr based on input from user //assume input has been taken in correctly int h = 5;//5th row in myArr int k = 7; // 7th column in myArr int p = 9; //9th unsigned char in myArr[h][k].Data unsigned char u = 241;//value to be written char* newName = "bob"; myArr[h][k].Data[p]=u; myArr[h][k].name=newName; return 0; } 

此代码不起作用。 实际上,它没有编译。 有人能帮帮我吗? 我只是想把指针理解为从java转换到C的一种方式。这是我在Java中非常容易做到的事情,我希望能够在C中做到这一点。 我听说必须在main之外声明一个2D数组,因此它的范围是全局的,因为堆栈的大小有限,并且结构的2D数组可能会填充它。 也有人可以解释一下吗? 我将如何声明一个大小在运行时确定的2D数组?

我打算用C和C来做这个。 所以请不要向我提供C ++语法提示。 谢谢。

  myArr[h][k].Data[p]=u; myArr[h][k].name=newName; 

应该

  myArr[h][k]->Data[p]=u; myArr[h][k]->name=newName; 

因为他们是指针。 循环中出现相同的错误。

 myStruct* myArr[][]; 

此行无效且无意义,因为您在main()中重新定义它。

如果要分配动态数组,可以使用:

 myStruct **myArr = malloc(x * y * sizeof(**myArr));