当我尝试将数组传递给函数并打印它的值时,出现Segmentation fault
错误。我是C编程的新手,并试图解决这个问题很长一段时间。任何帮助将不胜感激。如果可能的话,请用示例代码向我展示解决方案。
#include<stdio.h>
#include<stdlib.h>
void myfun(int **arr);
int main(int args, char** argv)
{
int arr[3][3] = {{3, 8, 6}, {2, 3, 2}, {4, 1, 2}};
myfun((int **) arr[3]);
return 0;
}
void myfun(int **arr)
{
int i;
for(i=0; i<3; i++)
{
printf("arr[1][i]:%d\n",arr[1][i]);//Gives Segmentation fault
}
}
答案 0 :(得分:1)
您不能将二维数组作为双指针传递。对于多维数组,函数需要知道除最后一个之外的所有维度。
所以定义myfunc
就像这样:
void myfun(int arr[3][3]);
并称之为:
myfun(arr);
答案 1 :(得分:1)
除了函数参数问题,您还可以在函数中交换数组索引。即:
#include<stdio.h>
#include<stdlib.h>
void myfun (int arr[][3]);
int main (void)
{
int arr[3][3] = {{3, 8, 6}, {2, 3, 2}, {4, 1, 2}};
myfun (arr);
return 0;
}
void myfun (int arr[][3])
{
int i;
for(i=0; i<3; i++)
{
printf (" arr[i][1]:%d\n", arr[i][1]); // OK now
}
} //result show 8, 3, 1
<强>输出强>
$ ./bin/arr_pass_2d
arr[i][1]:8
arr[i][1]:3
arr[i][1]:1
注意: arr[i][1]
不是arr[1][i]
此外,如果您在功能中更新printf
来电,则还可以包含行值。 e.g:
printf (" arr[%d][1]:%d\n", i, arr[i][1]);
<强>输出强>
$ ./bin/arr_pass_2d
arr[0][1]:8
arr[1][1]:3
arr[2][1]:1