您的位置:首页 > 编程语言 > C语言/C++

关于C/C++的二维数组作为函数参数问题

2018-02-12 21:45 525 查看

在写AncientMessages这道搜索题的过程中,因为代码有点啰嗦,所以就写了一个函数,刚好涉及到如何传递二维数组作为函数的参数。

传统的写法

int arr[3][3];
void show(int arr[][3],int n)
{
for(int i=0;i<n;i++)
for(int j=0;j<3;j++)
printf("%d%s",arr[i][j],j==2?"\n":" ");
}
show(arr);


开始以为这样是按值传递,所以换了个写法,调试了半天发现连输入都不对

- 错误的写法

int arr[3][3]={{1,1,1},{1,1,1},{1,1,1}};
void show(int *arr,int n,int m)
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
printf("%d%s",arr[i*m+j],j==2?"\n":" ");
}
show(arr,2,2);
arr[1][1]=2;
show(arr,2,2);
/*结果是
*1 1
*1 1
*1 1
*1 1
*/
预期是
/*结果是
*1 1
*1 1
*1 1
*1 2
*/


这是因为a[i*m+j]这里错了,因为数组在定义的时候已经事先分配好一段连续的地址了,所以那里的m应该等于3,应该是定义时的第二个维度。。而不是使用的那个变量m

经测试,第一种写法也是浅拷贝,所以一般就按照传统的来写就行了,如果头比较铁,也可以用其他的方法。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息