问题
单项选择题
以下程序的输出结果是( )。
#include<stdio.h>
void prt(int *x,int *y,int *z)
printf("%d,%d,%d\n",++ *x,++ *y,*(z++));
main()
int a=10,b=40,c=20;
prt(&a,&b,&c);
prt(&a,&b,&c);
A.11,42,31
12,22,41
B.11,41,20
12,42,20
C.11,21,40
11,21,21
D.11,41,21
12,42,22
答案
参考答案:B
解析: C程序可以通过传递指针的值(变量的地址)来达到修改实参变量值的目的,这是本题主要说明的问题。这里要注意表达式,(z++)的值是*z,其后的z++在程序中无实际作用。函数调用时,由于x,y和z分别指向a,b和c,因此,*x,*y和*z就是a,b和c的值。第一次调用函数时,*x=a=10,*y=b=40,*z=c=20,输出结果为11,41,20,至此,已经可以肯定选项B) 是正确的。第二次输出为:12,42,20。