回 帖 发 新 帖 刷新版面

主题:[讨论]求救   很新很新的菜鸟

以下程序运行结果是:   
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个回复)

沙发

void fun1(int x)
{
    x=20;
}
这个函数没用,晕
剩下的不解释,你会明白的

板凳

void……还赋值……还不是指针或者容器或者()

3 楼

考察点在于函数传递的过程中,参数实际上传递的是原变量的副本,也就是说,fun1中的x和main中的x就像是1班的张三和2班的张三考了相同的成绩一样,值上一开始相同但是不再有任何联系。当fun1中的x重新赋值为20的时候,main中的x不会发生改变。结合上述例子,可以类比为2班的张三好好学习了,成绩提高,但是1班的张三完全不知道,成绩原地踏步中。lz明白了吗

4 楼


答案可能是
x=10
0
1
2
3
分析:x=0123中的x 是外部变量,在main()函数中被屏蔽了。不影响主函数内的x变量的赋值。
void fun1(int x)
{
    x=20;
}里的x是fun1里的形参不是主函数里fun1外的x变量。即使将x=20,主函数里fun1外的x变量值不变。
而fun2函数的形参是个地址。a 和 b 是同一个地址,所以a[0]就是b[0]等等。

我来回复

您尚未登录,请登录后再回复。点此登录或注册