首页 > 试题广场 >

有以下程序,程序的输出结果是?

[单选题]

有以下程序

#include <stdio.h>
int a = 1, b = 2;
void funl(int a, int b) { printf("%d%d", a, b); }

void fun2() {
    a = 3;
    b = 4;
}

int main() {
    funl(5, 6);
    fun2();
    printf("%d%d\n", a, b);
}



程序运行后的输出结果是?

  • 5612
  • 3456
  • 1256
  • 5634
当变量名相同时,编译器是从当前位置开始逐层往上查找变量,
一旦找到相同名称的变量就停止。
所以优先找到的是局部变量的a、b。
发表于 2015-09-08 17:00:30 回复(2)
更多回答
推荐
funl函数中的a、b为局部变量,fun2函数中的a、b为全局变量。执行funl函数后输出5,6 执行完ftin2 后a变为3,b变为4,所以结果为3,4。D选项正确。
编辑于 2015-02-03 17:51:31 回复(3)
a=l?确定能赋值?
发表于 2016-03-30 17:07:36 回复(1)
这个题需要注意的是局部变量的定义,定义在函数内或块内的变量”
其中在函数fun2中,
void fun2()
    a=3; b =4;
}
并没有新定义变量,此时使用的是在全局变量的值。经过fun2以后,全局变量的值变为3和4.

假如将fun2改为
void fun2()
   int  a=3; int b =4;
}
此时函数的输出结果为5,6,1,2.因为这时fun2中改变的是局部变量的a,b的值,对全局变量的值没有影响。


发表于 2018-12-04 09:58:04 回复(1)
fun1中是值传递,其中a、b均是局部变量,不改变全局变量a、b的值;
fun2中使用的是全局变量,函数结束的时候,a、b的值都发生改变了。
发表于 2015-08-17 19:00:03 回复(2)
自己敲一遍 56 12 A
发表于 2018-04-26 19:17:17 回复(1)
fun2中a、b没有重新定义所以还是一个全局变量,所以fun2改变了a,b的值。在fun中a,b是形参。
发表于 2015-12-03 15:37:15 回复(0)
肯定有很多同学和我一样选A吧哈哈哈,还是基础知识不扎实,这题主要就是考察全局变量,提醒我们全局变量可不能乱用哦,不然在任意函数块都能被改变。
发表于 2022-09-26 21:38:43 回复(0)
fun2函数中的a,b没有新初始化为int a=3,b=4;所以a,b用的是全局变量,而不是局部变量
发表于 2018-04-14 15:51:57 回复(0)
局部变量和静态全局变量都在内存的bss段里面,特征是一致的,那就是只初始化一次 现在来看,这道题fun1,把static a, b改了为5 6 fun2 把static a,b改为3 4 好理解点是吗
发表于 2023-01-25 21:58:06 回复(0)
在fun2中没有定义变量a,b,二是使用之前的全局变量
发表于 2022-11-10 16:34:12 回复(0)
**fun2**是给全局变量 a,b重新赋值,而不是定义局部变量,眼瞎
发表于 2022-06-16 11:03:16 回复(0)
首先程序从main函数进入,先执行fun1,将5,6两个实参发送到fun1中的形参上,printf函数在fun1函数中执行,输出5,6。然后main函数执行fun2,fun2中将全局变量a和b的值改变,再然后main函数执行printf将全局变量的a和b输出,所以答案是D(代码写的不规范`-`)
发表于 2021-12-05 21:14:43 回复(0)
当变量名相同时,编译器是从当前位置开始逐层往上查找变量,
一旦找到相同名称的变量就停止。
所以优先找到的是局部变量的a、b。
发表于 2021-09-06 10:44:43 回复(0)
func1(5,6);
如果全局变量和函数里的形参或局部变量同名,那么在函数里,优先使用该函数作用域内的变量,即func1()里打印5 6;
void func2(){
    a=3;
    b=4;
}
这里直接修改全局变量的a和b,main()函数里打印的是全局变量a和b,输出3 4。




发表于 2020-09-28 20:28:39 回复(0)

funl函数中的a、b为局部变量,fun2函数中的a、b为全局变量。
执行funl函数后输出5,6 执行完ftin2 后a变为3,b变为4,所以结果为3,4。
发表于 2020-08-22 23:52:32 回复(0)
眼瞎了没看到fun2中没有int
发表于 2020-06-01 20:57:59 回复(0)
第二次中a与b的实参值已经有了
发表于 2020-03-06 14:34:22 回复(0)

调用fun2函数,改变了全局变量a b的值,迷惑点:fun2函数调用执行完毕以后,释放的是函数中局部变量的值,但是,这里的a b是全局变量

发表于 2019-11-16 18:27:00 回复(0)
变量有生存期,作用域,可见域,如果局部变量和全局变量重名,在局部变量的作用域范围类,全局变量是不可见的,也就是说全局变量被屏蔽了

发表于 2017-10-28 19:57:03 回复(0)
两个高数改变的是全局变量,全局变量内存在函数调用完毕后仍然存在,直到程序运行结束
发表于 2017-10-04 10:58:16 回复(0)