这里我编写了一段代码来打印 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);
}
最佳答案
如果你正在写
int (*mat)[3]
这意味着mat
是一个指向3个int
数组的指针。
另一方面,
int *mat[3]
意味着,mat
是一个由3个int *
组成的数组(指向整数的指针)。
显然这两个是不同的类型。所以,你的指针算术出错了。
现在,您可以理解,您的注释//指向二维数组的指针
是不正确的。
关于c - 为什么这个二维指针表示法有效而另一个无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37293582/