阶段性目标范文:c语言问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/02 06:28:32
【2.34】下面程序的输出结果是____。
#include <stdio.h>
int k=1;
main( )
{ int i=4;
fun(i);
printf ("\n%d,%d",i,k); /* ① */
}
fun(int m)
{ m+=k;k+=m;
{ char k='B';
printf("\n%d",k-'A'); /* ② */
}
printf("\n%d,%d",m,k); /* ③ */
}
① A) 4,1 B) 5,6 C) 4,6 D) A,B,C
② A) 1 B) -59 C) -64 D) A,B,C
③ A) 5,66 B) 1,66 C) 5,6 D) A,B,C
参考答案: ① C ② A ③ C
要求有详细分析过程

int k 它在MAIN方法外面是属于全局变量。
m+=k,m变为5,k+=m,k变为6, 至于char k和全局变量k不是一个变量
它们是两种类型,占用两块内存。所以③选C
printf("%d",k-'A'); 两个字符串相减,得到的是ASCII码 值为1。所以②选A
i传入FUN方法,属于值传递,只是i值的副本传给了m,无论m怎么操作,操作的都是两块内存,总不会影响i,所以i仍为4,所以①选C

fun(i); 并不会改变i的值, 因为是值传递, 到了函数体里面,形参m的改变并不会引起实参i的改变。 参见c语言指南的函数,参数部分。
但k就不一样,k是全局变量,在子函数里面一样会引起k的改变。

只要搞清楚函数参数的值传递,地址(指针)传递和引用传递的区别就行了。
还有个变量作用域的问题。