以下C程序段的输出结果是(30)。    #include<stdio.h>    void prt(int*x,Int*y,int*z){  printf("%d,%d,%d\n",++*x,++*y,*(z++));  }    void main()

admin2009-02-15  22

问题 以下C程序段的输出结果是(30)。    #include<stdio.h>    void prt(int*x,Int*y,int*z){  printf("%d,%d,%d\n",++*x,++*y,*(z++));  }    void 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,41
D、11,41,20    12,42,22

答案B

解析 C语言不但可以通过传值的方式进行函数调用,还可以通过传递指针的值(变量的地址)来达到修改实参变量值的目的,这是本试题主要说明的问题。其次,应注意表达式*(z++)的值是*z,其后的z++是使指针z指向下一个整数,在程序中无实际作用。函数调用时,由于x、y和z分别指向a、b和c,因此,*x、*y和*z就是a、b和c。第1次调用函数时,*x=a=10,*y=b=40,*z=c=20,输出结果为11,41,20。同时注意到运算符。和++的运算优先级别相同,遵循右结合性。则*z++与*(z++)作用相同,但(*z)++含义不同。(*z)++的含义是c变量值的自增。因此第2次调用函数时,输出结果为12,42,20。
转载请注明原文地址:https://kaotiyun.com/show/G3jZ777K
0

最新回复(0)