gpt4 book ai didi

c - 使用带有指向双指针的指针的 scanf()

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:03 24 4
gpt4 key购买 nike

我觉得我已经尝试了我所知道的每一种组合来让它发挥作用,但我无法弄清楚。如何将 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);
}

最佳答案

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

#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]: %d\n", 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);
}

关于c - 使用带有指向双指针的指针的 scanf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38134882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com