#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之类的是值传递。
追问懂了,谢谢了
本回答被提问者采纳