【问题标题】:difference between *p++ and ++*p*p++ 和 ++*p 的区别
【发布时间】: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 的下一个位置。

标签: c pointers printf


【解决方案1】:

当然。当您第二次打印*p 时,您已经在第一次调用printf() 的那一行增加了它(指针指向的值)。

int a = 5;                
int *p = &a;              // p = &a, *p = 5
printf("%d\n\n", ++*p);   // p = &a, *p = 6
printf("%d\n", *p++);     // p = &a + 1, *(p - 1) = a = 6 (still!)

【讨论】:

  • 最后一行的注释有点误导。一旦p&a + 1*p 显然不再是6。
  • @sepp2k 很公平,已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2022-12-04
相关资源
最近更新 更多