C语言的函数参数传递到底是怎么样的?比如这个程序,为什么最后输出的是16个1而不是16个0?

#include<stdio.h>
void doit( int Map[ 4 ][ 4 ] );
int main( )
{
int Val_1, Val_2;
int Map[ 4 ][ 4 ];
for( Val_1 = 0; Val_1 <= 3; Val_1++ )
{
for( Val_2 = 0; Val_2 <= 3; Val_2++ )
{
Map[ Val_1 ][ Val_2 ] = 0;
}
}
doit( Map );
for( Val_1 = 0; Val_1 <= 3; Val_1++ )
{
for( Val_2 = 0; Val_2 <= 3; Val_2++ )
{
printf( "%d", Map[ Val_1 ][ Val_2 ] );
}
}
return 0;
}
void doit( int Map[ 4 ][ 4 ] )
{
int Val_1, Val_2;
for( Val_1 = 0; Val_1 <= 3; Val_1++ )
{
for( Val_2 = 0; Val_2 <= 3; Val_2++ )
{
Map[ Val_1 ][ Val_2 ] = 1;
}
}
}

你的doit函数中的Map[ Val_1 ][ Val_2 ] = 1;语句已经把二维数组Map的每一个元素都填为1了,所以主函数中输出全为1。要注意啊,void doit( int Map[ 4 ][ 4 ] )的形参Map[ 4 ][ 4 ]是被编译器解释为一个(*Map)[4]型指针的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-19
int Map[ 4 ][ 4 ]相当于传递了一个二重指针。修改之后map的每个元素都为1.
因为传递数组作为函数的参数,相当于地址传递,地址传递会修改对应传递过来的实参的值的,不单单是副本操作,而是对应的实参都变掉了。追问

是不是数组作为参数就是传递指针,int之类的作为参数不是传递指针?

追答

是的,数组传递其实传递的就是指针,int之类的是值传递。

追问

懂了,谢谢了

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网