矩阵中的分段错误-C

败血症

运行此代码时发生分段错误。如果将** mat更改为mat [3] [3],我什么都找不到,并且可以运行。请告诉我出了什么问题,谢谢

#include<stdio.h>
void getdata(int **mat)
{
    int i,j;
    for (i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
            mat[i][j] = rand()%3;
    }
}
void putdata(int **mat)
{
    int i,j;
    for (i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
            printf("%d",mat[i][j]);
        printf("\n");
    }
}
void main()
{
    int mat1[3][3];
    int mat2[3][3];
    getdata(mat1);
    getdata(mat2);
    putdata(mat1);
}
x

在中mainmat1并且mat2将衰减到的指针int[3],该指针与相同int **因此,getdata()并且putdata()会将指针值视为与实际不同的类型,从而导致未定义的行为。

int mat1[3][3];
int (*decayed_mat1)[3] = mat1;
assert(decayed_mat1 == &mat1[0]);

数组通过C函数中的“引用”传递。这的真正含义是,声明为数组类型的函数参数实际上具有衰减类型。

void getdata(int mat[3][3]);
void (*funcptr)(int (*)[3]) = getdata;

更改函数参数类型以int[3][3]使参数的类型与传入的参数匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章