我想通过指针打印二维数组。使用这种方式,我可以很好地打印一维数组,但是打印二维数组会导致分段错误。
如果我通过赋值
请有经验的人告诉我原因。谢谢。
void printOutput(int **array,int row, int col)
{
int i = 0, j = 0;
int dualArray[2][2] = {{1,2},{3,4}};
int singleArray[]={1,2,3};
int *sa = singleArray;
printf ("Output values :\n");
for(i=0;i<3;i++)
printf("%d ",sa[i]);
printf("\n");
int **da = dualArray;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%d ",da[i][j]);
}
printf("\n");
}
}
Output values :
1 2 3
Segmentation fault (core dumped)
如果我通过赋值
int *sa = singleArray;
(我可以打印sa[i]
),就可以访问1D数组(sa)
,那么为什么我不能访问2D数组(da) int **da = dualArray;
?当我访问2D数组时,会出现分段错误。请有经验的人告诉我原因。谢谢。
singleArray
来说,这是&signleArray[0]
,当然是int *
类型。对于dualArray
来说,这是指向int (*)[2]
类型数组的指针&dualArray[0]
。 - Some programmer dudeint (*da)[2]
。 - user3386109main.c: 在函数'printOutput'中: main.c:15:16: 警告:指针类型不兼容的赋值 [-Wincompatible-pointer-types] int **da = dualArray;
- Ṃųỻịgǻňạcểơửṩ