有以下程序 void fun(char *c, int D) { *c-*c+1;d=d+1; printf("%c, %c,",*c, D) ;}main(){ char a=’A’, b=’a’; fun(&b, A) ; pr

admin2009-01-15  40

问题 有以下程序  void fun(char *c, int D) { *c-*c+1;d=d+1;    printf("%c, %c,",*c, D) ;}main(){   char a=’A’, b=’a’;    fun(&b, A) ;    printf("%c, %c\n", a, B) ;}     程序运行后的输出结果是

选项 A、B, a, B, a
B、a, B, a, B
C、A, b, A, b
D、b, B, A, b

答案8

解析 本题考查用地址作为参数与值作为参数传递之间的不同。在c语言中,数据传递是单向传递的。  “值传递”就是实参把对应的值传给相应的形参变量,然后形参和实参不再有任何联系,在被调用函数中,对形参的修改并不影响对应的实参。  “地址传递”就是实参把相应的地址传给相应的行参变量,在被调用函数中对行参的修改将修改对应的实参地址对应的值.程序中定义了两个字符型变量’a’和’b’,并分别赋初值为,At和 ’a’,然后调用函数fun(),将b的地址和a值作为实参.在函数fun()中第一个参数是传递地址,故在调用函数fun()中对参数做的修改(即将b值加一)将影响字符型变量的值(变为b),函数fun()第二个参数是传值的,故在调用函数fun()对第二个参数做的修改不影响字符型变量a(即’a’的值仍为’A’),所以在fun()函数中输出的是d为b,B,接着在主函数中,输出a,b,然后退出fun()函数,接着执行后面的语句,输出A,b.所以最后输出为b,B,A,b。所以4个选项中D正确。
转载请注明原文地址:https://kaotiyun.com/show/8nXp777K
0

随机试题
最新回复(0)