这里我编写了一个代码来打印出3x3矩阵的对角线值之和。这里我必须将矩阵传递给一个函数。矩阵传递给一个指针数组。代码工作但问题是我必须按以下方式编写参数
int (*mat)[3]
以下导致程序崩溃
int *mat[3]
我想知道两者有什么区别?为什么第二个会导致程序崩溃?
完整代码:
#include<stdio.h>
int main(){
int mat[3][3];
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("input row %d column %d = ",i+1,j+1);
scanf("%d",&mat[i][j]);
printf("\n");
}
}
// task 1 : Display sum of diagonal values
diagonal_sum(mat);
}
diagonal_sum(int (*mat)[3]){ // pointer to a 2d array
printf("\n DIAGONAL SUM \n");
int sum=0;
int i;
for(i=0;i<3;i++){
sum+=*(*(mat+i)+i); // access the diagonal values of the matrix
}
printf("\ndiagonal sum is = %d \n",sum);
}
答案 0 :(得分:3)
如果您正在撰写
int (*mat)[3]
这意味着mat
是一个指向3 int
s。
另一方面,
int *mat[3]
表示mat
是一个3 int *
s(指向整数的指针)的数组。
显然这两种是不同的类型。所以,你的指针算法出错了。
现在,您可以理解,您的评论// pointer to a 2d array
不正确。