注册 登录
编程论坛 C++教室

很新很新的 菜鸟!!!

wwhwhj0121 发布于 2010-06-26 16:50, 390 次点击
以下程序运行结果是:   
x =
0
1
2
3
#include <stdio.h>
void fun1(int x)
{
    x=20;
}
void fun2(int b[4])
{
    int  j;
    for(j=0; j<4; j++)
   {
       b[j]=j;
   }
}
main()
{
    int x = 10;
    int  a[4] = {1,2,3,4}, k;
    fun1(x);
    printf("x = %d\n", x);
    fun2(a);
    for(k=0; k<4; k++)
    {
        printf("%d\n", a[k]);
    }
}


求个详尽解答,谢谢
4 回复
#2
南国利剑2010-06-26 17:29
你的输出结果是由主函数的最后一个循环语句输出的。
你调用了fun2(int b[4])
这个函数的形参是数组,这个数组和主函数的数组a用的是同一个内存空间,
所以你在fun2的修改就相当于对数组a的修改。
这样输出结果就没有什么问题了吧。
#3
南国利剑2010-06-26 17:30
你是新来的吧。
欢迎你的到来。
#4
caimingseed2010-06-27 14:41
x = 10
0
1
2
3
你的问题应该是为什么调用函数后,x的值没有变,而数组的值a[4]发生了变化。
因为在调用第一个函数时,系统是把x的值传给函数fun1(int x)中的x,原来的x的值不变。
在调用第二个函数时,系统把a[4]每个元素的地址传给fun2()函数中,
所以在主函数输出数组时才会发生变化的
#5
zgxyz20082010-06-27 21:44
X是值传递,而数组才作参数时会被转化为指针类型....
1