C语言问题~6

来源:百度知道 编辑:UC知道 时间:2024/05/25 02:17:49
有以下程序

void fun2(char a, char b){printi(“%b%c”,a,b);}

char a= ‘A’,b= ‘B’;

void fun1( ){ a= ‘C’l b= ‘D’; }

main( )

{ fun1( )

printf( “%c%c”,a,b);

fun2(‘E’, ‘F’);

}

程序的运行结果是________。

A)CDEF B)ABEF C)ABCD D)CDAB

既然定义a,b是全局变量,那么只有程序结束前再次运行程序时,静态存储变量才重新被赋值,所以我觉得该选B这道题?

你的代码应该有些小错误。如果我没理解错的话应该是选A的“CDEF”。a、b是全局变量这是没有错的,而且正是因为它们是全局变量函数fun1才能“有效”改变它的值而“返回”到main函数里。我想你应该把“全局变量”认为是“值不可改变”的量了。

首先 当程序 一运行 就直接 开始 对 全局变量 赋值 也就是说 先给全局变量赋值 然后 再进入 main 函数, a b 被初始化A B
在 main 函数中 fun1 对 ab 进行了赋值,其实 也正是这句的要求 才逼使ab必须为全局变量 否则void fun1( ){ a= ‘C’l b= ‘D’; }这句话 你无论放在main前还是main后 都是语法错误
还有 fun2中的 ab 和全局变量ab 完全无关 这里的ab 是货真价实的局部变量 他只是和全局变量 重名了 之所以 未出现 语法错误 是因为 他们归属的作用域不同
所以 当你知道 fun1 逼迫 ab 为全局变量 这样fun1 才能达到 他想改变ab的值的目的 以后 你就会 理解这个题了
就不会陷入 出题人 给你设的套

a= ‘C’l b= ‘D’; 这句话什么意思?是对a和b分别赋值么?
运行了结果就是A啊,fun1( )直接对全局变量改值了啊。

我觉得应该是A呢

A