gpt4 book ai didi

c - 为什么这个二维指针表示法有效而另一个无效

转载 作者:行者123 更新时间:2023-11-30 18:37:24 26 4
gpt4 key购买 nike

这里我编写了一段代码来打印 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/37237519/

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