我需要从用户那里获取矩阵的大小

时间:2014-03-01 18:16:38

标签: c matrix rows

我想在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的错误(在最后一行)。从用户那里获取矩阵大小的正确方法是什么?

4 个答案:

答案 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

中创建用户定义大小数组的信息