我必须声明Rx3的C大小的三个二维数组,称为array1,array2和sum。
int main()
{
int row = 0;
printf("Enter the no. of rows:");
scanf("%d", &row);
printf("MyArray[%d][3]", row);
int ** array1;
array1 = (int**)malloc(4 * row);
int rep1;
for (rep1 = 0; rep1 <= row; rep1++)
{
array1[rep1] = (int*)malloc(3 * 4);
}
int ** array2;
array2 = (int**)malloc(4 * row);
int rep2;
for(rep2 = 0; rep2 <= row; rep2++)
{
array2[rep2] = (int**)malloc(3 * 4);
}
}
但是这段代码不起作用,我如何添加第三个数组
答案 0 :(得分:1)
array1 = (int**)malloc(4*row);
这里4
是什么?它是sizeof(int)
硬编码还是列数?
要为具有固定宽度的2D阵列预留空间,您可以使用:
#define COLS 4
int (*arr)[COLS]; /* A pointer to an array of n int's */
size_t nrows = user_input();
arr = malloc(sizeof(*arr) * nrows);
如果您事先不知道列数,可以使用Variable Length Array(自C99起):
size_t ncols = user_input();
int (*arr)[ncols]; /* VLA */
size_t nrows = user_input();
arr = malloc(sizeof(*arr) * nrows);
如何添加第三个数组?
size_t ncols = user_input();
int (*arr1)[ncols];
int (*arr2)[ncols];
int (*arr3)[ncols];
size_t nrows = user_input();
arr1 = malloc(sizeof(*arr1) * nrows);
arr2 = malloc(sizeof(*arr2) * nrows);
arr3 = malloc(sizeof(*arr3) * nrows);
或者如果你喜欢大块:
size_t ncols = user_input();
int (*arr)[ncols];
size_t nrows = user_input();
arr = malloc(sizeof(*arr) * nrows * 3);
int (*arr1)[ncols] = arr;
int (*arr2)[ncols] = arr + rows;
int (*arr3)[ncols] = arr + rows * 2;
通过这种方式,一个简单的free(arr);
就足够了。
答案 1 :(得分:0)
此代码在GCC编译器中正常工作。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int row=0;
printf("Enter the no. of rows:");
scanf("%d", &row);
printf("MyArray[%d][3]",row);
int **array1 = (int**)malloc(sizeof(int*)*row);
int rep1;
for (rep1 = 0; rep1 <= row; rep1++)
{
array1[rep1] = (int*)malloc(3*sizeof(int));
}
int ** array2;
array2 = (int**)malloc(sizeof(int*)*row);
int rep2;
for(rep2 = 0; rep2 <= row; rep2++)
{
array2[rep2] = (int*)malloc(3*sizeof(int));
}
}