问题 单项选择题

有以下程序: 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

答案

参考答案:D

解析: 程序中定义了两个字符型变量'a'和'b',并分别赋初值为'A'和'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正确。

填空题
单项选择题