C语言 对指向双指针的指针使用scanf()



我觉得我已经尝试了我所知道的每一个组合来让它工作,但不能弄清楚它。我怎么能把scanf()变成一个int**作为一个指针传递给一个函数?我试着搜索,但找不到这个,如果它是重复的,请让我知道,我会删除。它开始运行,并在输入几个值后出现分段错误。

这是我的代码,我认为它在setMatrix()函数的scanf()行上搞砸了:

#include <stdio.h>
#include <stdlib.h>
// create zero initialized matrix
int** callocMatrix(int rmax, int colmax) {  
        int **mat = calloc(rmax, sizeof(int*));
        for(int i = 0; i < rmax; i++) mat[i] = calloc(colmax, sizeof(int));
        return mat;
}
// fill matrix
void setMatrix(int ***mat, int r, int c){
    printf("Insert the elements of your matrix:n");
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            printf("Insert element [%d][%d]: ", i, j);
            scanf("%d", mat[i][j]); // problem here??
            printf("matrix[%d][%d]: %dn", i, j, (*mat)[i][j]);
        }
    }   
    return;
}
// print matrix
void printMatrix(int ***mat, int r, int c){ 
    for (int i=0; i<r;i++){
        for (int j=0; j<c;j++) {
                printf("%d ", (*mat)[i][j]);
        }
        printf("n");
    }
}
int main(int argc, char *argv[]) {
    int r = 3, c = 3;
    int **mat = callocMatrix(r, c);
    setMatrix(&mat, r, c);
    printMatrix(&mat, r, c);
}

不需要使用三重指针***。传递二维数组将按原样工作。下面是代码:

#include <stdio.h>
#include <stdlib.h>
// create zero initialized matrix
int** callocMatrix(int rmax, int colmax) {
    int **mat = calloc(rmax, sizeof(int*));
    for(int i = 0; i < rmax; i++) mat[i] = calloc(colmax, sizeof(int));
    return mat;
}
// fill matrix
void setMatrix(int **mat, int r, int c){
    printf("Insert the elements of your matrix:n");
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            printf("Insert element [%d][%d]: ", i, j);
            scanf("%d", &mat[i][j]); // no problem here
            printf("matrix[%d][%d]: %dn", i, j, mat[i][j]);
        }
    }
}
// print matrix
void printMatrix(int **mat, int r, int c){
    for (int i=0; i<r;i++){
        for (int j=0; j<c;j++) {
                printf("%d ", mat[i][j]);
        }
        printf("n");
    }
}
int main(int argc, char *argv[]) {
    int r = 3, c = 3;
    int **mat = callocMatrix(r, c);
    setMatrix(mat, r, c);
    printMatrix(mat, r, c);
}

应该是:

scanf("%d", &(*mat)[i][j]);

你传递一个指针到你的矩阵对象,所以你需要解引用它(与*),就像你对printf做的那样。然后scanf需要写入元素的地址,因此需要&

相关内容

  • 没有找到相关文章

最新更新