【发布时间】:2016-11-03 05:51:46
【问题描述】:
我觉得我已经尝试了所有我知道的组合来让它工作,但无法弄清楚。我如何将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]: %d\n", 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);
}
【问题讨论】:
-
请注意,标题中的“双指针”具有误导性。您指的是
int **,但听起来您指的是double *。
标签: c multidimensional-array scanf pass-by-pointer