通过参考和扫描值传递矩阵

时间:2017-08-09 06:55:16

标签: c matrix pass-by-reference

我正在尝试将值扫描到一个矩阵中,该矩阵通过引用函数传递并且未编译。 怎么了? 我认为问题符合scanf,但我不知道如何解决它。

#include <stdio.h>
#include <stdlib.h>

int** initMatrix(int lines, int columns) {
    int i;
    int** matrix;
    matrix = (int**) calloc(lines, sizeof(int*));
    for (i = 0; i < lines; i++) {
        matrix[i] = (int*) calloc(columns, sizeof(int));
    }
    return matrix;
}

void fillMatrixValues(int*** matrixA, int lines, int columns) {
    int i, j;
    for (i = 0; i < lines; i++) {
        for (j = 0; j < columns; j++) {
            scanf("%d", matrixA[i][j]);
        }
    }
}

void printMatrix(int** matrix, int lines, int columns) {
    int i, j;
    for (i = 0; i < lines; i++) {
        for (j = 0; j < columns; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
}

void main() {
    int** matrixA;
    int lines = 2, columns = 2;
    matrixA = initMatrix(lines, columns);
    fillMatrixValues(&matrixA, lines, columns);
    printMatrix(matrixA, lines, columns);
}

1 个答案:

答案 0 :(得分:2)

void main - &gt;未定义的行为

使用

int main(void)

int main(int argc, char ** argv)

您应该检查scanf

的返回值
if (scanf("%d", matrixA[i][j]) != 1)
{
    // failed
}

下一个问题

void fillMatrixValues(int ***matrixA, int lines, int columns)
fillMatrixValues(&matrixA, lines, columns)

void fillMatrixValues(int **matrixA, int lines, int columns)
fillMatrixValues(matrixA, lines, columns)