多维数组的长度

时间:2012-10-22 08:44:32

标签: c++ arrays

我有一个简单的矩阵运算程序,但我有一个问题 - >我有例如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]));

1 个答案:

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