我想在C中创建一个矩阵,但矩阵的大小必须由用户决定。这是我的代码。
int row1,column1;
printf("Please enter number of rows in first matrix: ");
scanf("%d",&row1);
printf("Please enter number of columns in first matrix: ");
scanf("%d",&column1);
int M1[row1][column1];
我得到row1和column1的错误(在最后一行)。从用户那里获取矩阵大小的正确方法是什么?
答案 0 :(得分:0)
您必须动态分配数组,因为您在编译时不知道大小。
我的提示:使用单个数组会更简单:
int M1[] = new int[row1 * column1];
然后将其称为
M1[column + line * row1];
如果您绝对需要2D矩阵,请参阅此问题:How do I declare a 2d array in C++ using new?
并且不要忘记正确地删除[]。
答案 1 :(得分:0)
这是因为您无法将数组长度的数组初始化为变量。声明一个指针并使用malloc动态分配数组。
int row1,column1;
printf("Please enter number of rows in first matrix: ");
scanf("%d",&row1);
printf("Please enter number of columns in first matrix: ");
scanf("%d",&column1);
int **arr;
//allocate the memory
arr=malloc(sizeof(int*)*row1);
int i;
for (i=0;i<row1;i++)
*(arr+i)=malloc(sizeof(int)*column1);
//do what you want to do
//free the memory
for (i=0;i<row1;i++)
free(*(arr+i));
free(arr);
答案 2 :(得分:0)
相关:dynamic allocating array of arrays in C
首先分配一个指针数组:
M1 = (int**)malloc(row1 * sizeof(int*));
然后将每个指向另一个数组。
for(i = 0; i < row1; i++)
M1[i] = (int*)malloc(column1 * sizeof(int));
答案 3 :(得分:0)
在c中创建用户定义大小的矩阵,您需要使用malloc或alloca()来使用动态分配。您可以阅读此link以获取有关在c
中创建用户定义大小数组的信息