C-基于用户输入的多维数组内存分配

C-基于用户输入的多维数组内存分配,c,arrays,C,Arrays,我已经看到了二维数组的以下声明 int arr[][3] = { {1,2,3}, {4,5,6}}; 我的问题是如何在运行时根据第一维度的用户输入分配以下多维数组 #define M 10 #define N 15 int arr[][M][N] 首先声明一个适合访问数组的指针: int (*array)[M][N]; 然后根据用户输入为阵列分配内存: array = malloc(P * sizeof(*array)); // P is the value

我已经看到了二维数组的以下声明

  int arr[][3] = { {1,2,3}, {4,5,6}};
我的问题是如何在运行时根据第一维度的用户输入分配以下多维数组

   #define M 10
   #define N 15

   int arr[][M][N]

首先声明一个适合访问数组的指针:

int (*array)[M][N];
然后根据用户输入为阵列分配内存:

array = malloc(P * sizeof(*array));    // P is the value obtained from the user
然后将指针当作三维数组使用:

array[x][y][z] = 42;

完成后不要忘记释放内存。

C允许可变长度数组。因此,在从用户处读取第一个维度后,可以使用该大小声明数组

int n;
printf("How big is it? ");
scanf("%d", &n);
int arr[n][M][N];

注意,它仅在C99中允许,在C99中是可选的C11@GRCVLA允许任何级别的嵌套数组。你能解释一下这些行吗。。。int(*数组)[M][N]和malloc。在malloc中,返回的大小是多少?整个数组的大小或int指针的大小?@userfirst785935
sizeof(array)
是指针的大小,但是
sizeof(*array)
是150 int数组的大小。因此,如果您尝试
printf(“%zu\n”,sizeof(*array))
,输出应该是600(假设
int
是4个字节)。当您将600乘以用户提供的值时,结果是整个3D数组中的字节数。