int a=2,*p=&a, *q=&a;
printf("%d
%d\n",*p++,*(q++));
p=&a;q=&a;
printf("%d
%d\n",*p,(*q)++);
输出分别是多少啊 ??
*(q++)
(*q)++)
*p++,
*p p
谁个详细 解释下啊
第一个printf
*p++ == *(p++) ,先取p的地址,p自加,指向a的后面了,*p == 2,输出 2
*(q++)
同上 输出 2
由于只是p 和 q指向的地址变化,所以 a 的值没有变化
p q 重新指向 a
第二个printf
*p == a == 2
(*q)++ , 先取*q的值 ,输出 2 ,然后再自加 ,此时 a = (*q+1) = 3
输出: 2 2
2 2
此时 a = 3
分析结果和实际输出不一样
实际输出 2 2
3 2
这个结果仔细想想也是合理的
原因在第二个printf
*p 和 (*q)++ , 这两个的计算顺序由计算机决定的,不是写在前面就先算前面...
运行的时候,有可能先算(*q)++ ,这时候 a = 3 了,再计算 *p ,所以输出 3
LZ不要纠结这个问题了
[
本帖最后由 Ryker 于 2013-5-7 08:56 编辑 ]