0

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

1 回答 1

0

如果你不知道第一个维度的大小,你就不能有一个多维数组,你需要一个锯齿状数组(一个数组数组),就像你做的那样。

然后你仍然可以获得分配的行数和列数。count将原型更改为:

int** count(int& rows, int& columns)

并在其中进行这些分配(在您阅读了 i 和 j 的值之后):

rows = i;
columns = j;

并像这样打电话countmain

int rows;
int columns;
int** m1 = count(rows, columns);

然后你可以调用writeMatrix:

writeMatrix(m1, rows, columns);

顺便说一句,除非您出于教育目的这样做,否则您应该使用std::vector<std::vector<int>>(或一些类似的数组类),而不是 int**。

于 2012-10-22T08:50:03.577 回答