【发布时间】:2013-07-05 11:17:24
【问题描述】:
int a = 5;
int *p = &a;
printf("%d\n\n", ++*p);
printf("%d\n", *p++);
++*p 等价于++(*p)。但是*p++ 增加了指针,而不是 p 指向的值。
但我无法理解为什么我的代码中的 printf 语句显示相同的值“6”。
这背后有什么具体的逻辑吗?
【问题讨论】:
-
至于
*p++为什么递增指针而不是p指向的值,是因为后缀++运算符的precedence比解引用运算符*高。跨度> -
(1): 表达式
++*p的计算结果为*p = *p + 1。这增加了p指向的变量的值。p指向a,因此a的值增加到 6,第一个printf()输出:6。(2): 而在*p++中,由于后缀++,printf()首先打印*p的值,即前一个表达式的 6,然后p递增到a的下一个位置。