问题描述:
#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
问题解答:
第一回执行函数后 *(z++) 是由Z指向的地址增加了4个字节 而C里存的值20并没有改变,第二后指行后和第一回是一样的C中的值并没有被改变,所以C中还是20
输出结果与运算符的优先级有关,()的优先级高于*
printf("%d,%d,%d\n",++*x,++*y,*(z++));与以下语句等价
printf("%d,%d,%d\n",++*x,++*y,*z);}
z=z+1;
自增的不是*z而是z。
z时参数,临时指针变量。