我有一个简单的矩阵运算程序,但我有一个问题 - >我有例如array [3] [3],我需要一些方法来获得维数 - 在这种情况下3,这里是代码:
#include <stdio.h>
#include <stdlib.h>
int **count()
{
printf("Write number of rows and collumns in format ROWS space COLLUMNS");
int i = 0;
int j = 0;
scanf("%i %i", &i, &j);
int **mat1 = (int**)malloc(i*sizeof(int*));
for (int x = 0; x < j;x++){
mat1[x] = (int*)malloc(j*sizeof(int));
}
for (int x = 0; x < i;x++){
for (int y = 0; y < j;y++){
scanf("%i",&mat1[x][y]);
}
}
printf(Write number of rows and collumns in format ROWS space COLLUMNS");
int i2 = 0,j2 = 0;
scanf("%i %i", &i2, &j2);
int **mat2 = (int**)malloc(i2*sizeof(int*));
for (int x2 = 0; x2 < j2;x2++){
mat2[x2] = (int*)malloc(j2*sizeof(int));
}
for (int x2 = 0; x2 < i2;x2++){
for (int y2 = 0; y2 < j2;y2++){
scanf("%i",&mat2[x2][y2]);
}
}
int i3 = i, j3 = j;
int **mat3 = (int**)malloc(i3*sizeof(int*));
for (int x = 0; x < j3;x++){
mat3[x] = (int*)malloc(j3*sizeof(int));
}
for (int x3 = 0; x3 < i3;x3++){
for (int y3 = 0; y3 < j3;y3++){
mat3[x3][y3] = mat1[x3][y3] + mat2[x3][y3];
}
}
return mat3;
}
int writeMatrix(int **mat, int rows, int collumns)
{
int i = rows, j=collumns;
for (int x = 0; x < i;x++){
for (int y = 0; y < j;y++){
printf("%3i ",mat[x][y]);
}
printf("\n");
}
return 0;
}
int main()
{
int **m1 = count();
writeMatrix(m1,x,x);//HERE I NEED TO KNOW NUMBER OF ROWS AND COLLUMNS
free(m1);
}
这是在普通数组[] []的情况下对我有用的代码,但在这种情况下不是 -
int y = (sizeof(m1)/sizeof(m1[0][0])) / (sizeof(m1)/sizeof(m1[0]));
答案 0 :(得分:0)
如果你没有静态地知道第一个维度的大小,就不能拥有一个多维数组,你需要一个锯齿状数组(一个数组数组),就像你做的那样。
然后您仍然可以获得分配的行数和列数。将count
原型更改为:
int** count(int& rows, int& columns)
并在其中执行这些分配(在您阅读了i和j的值之后):
rows = i;
columns = j;
从count
拨打main
,如下所示:
int rows;
int columns;
int** m1 = count(rows, columns);
然后你可以调用writeMatrix:
writeMatrix(m1, rows, columns);
顺便说一句,除非你出于教育目的这样做,否则你应该使用std::vector<std::vector<int>>
(或类似的数组类),而不是int **。