“++”的前置与后置

racke 2004-09-06 08:22:47
“++”的前置与后置有什么区别。
/* order.c -- precedence in pointer operations */
#include <stdio.h>
int data[2] = {100, 200};
int moredata[2] = {300, 400};
int main(void)
{
int * p1, * p2, * p3;

p1 = p2 = data;
p3 = moredata;
printf(" *p1 = %d, *p2 = %d, *p3 = %d\n",
*p1 , *p2 , *p3);
printf("*p1++ = %d, *++p2 = %d, (*p3)++ = %d\n",
*p1++ , *++p2 , (*p3)++);
printf(" *p1 = %d, *p2 = %d, *p3 = %d\n",
*p1 , *p2 , *p3);
return 0;
}

Here is its output:

*p1 = 100, *p2 = 100, *p3 = 300
*p1++ = 100, *++p2 = 200, (*p3)++ = 300
*p1 = 200, *p2 = 200, *p3 = 301

为何*p1++ = 100?
...全文
196 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
junmayang 2004-09-07
  • 打赏
  • 举报
回复
*p1 = 100
*p1++ 先得到100这个值,然后指针p1加1,注意是指针
liyun123126 2004-09-07
  • 打赏
  • 举报
回复
++在前面就先做自加运算后做算术运算
++在后面就先做算术运算后做自加运算
Vigorcsdn 2004-09-07
  • 打赏
  • 举报
回复
*p1++ :先取值,再自加;
*++p1:先自加,再取值。
只要注意都是对于指针p而言的就好了,与++(*p1),(*p1)++不一样
Leon_A 2004-09-06
  • 打赏
  • 举报
回复
优先级一样,不过是右结合
applealin 2004-09-06
  • 打赏
  • 举报
回复
comebaby(游民) 说的好啊!
comebaby 2004-09-06
  • 打赏
  • 举报
回复
wsheng98(圣)的并没有错,++的优先级是高于*
*p++中自增都是在p上实现的,不是在*p上实现的
如果是*的优先级高的话,自增应该是作用在*p上的
(*p)++和*p++显然不是一样 的
liujingfu123 2004-09-06
  • 打赏
  • 举报
回复
wsheng98(圣) ,你是在误人子弟啊,++的优先级高于*吗?
还是去翻翻课本吧,*p++和*++p的区别就是:取值与地址增加的先后问题。
前者是先把*p取出来,然后p的值(地址)加上1,与*p(++)等价
后者是先把p的值(地址)加1,然后取出*p,
jade_c 2004-09-06
  • 打赏
  • 举报
回复
补充 zgy166(昆深) 的一句话
不管是++p1,还是p1++
p1 的值都是加了1
只是先用后用的问题
wsheng98 2004-09-06
  • 打赏
  • 举报
回复
++的优先级高于*,先执行p1++,然后是*(p1++),p1++只有在表达式结束(如逗号,或分号)后,p1的值才加1
degeshi 2004-09-06
  • 打赏
  • 举报
回复
zgy166 说的就是呀,
comebaby 2004-09-06
  • 打赏
  • 举报
回复
简单的说P++就是先用完p的原值,在进行自增,
++P就是先自增,再用;
printf(" *p1 = %d, *p2 = %d, *p3 = %d\n",
*p1 , *p2 , *p3);
printf("*p1++ = %d, *++p2 = %d, (*p3)++ = %d\n",
*p1++ , *++p2 , (*p3)++);
printf(" *p1 = %d, *p2 = %d, *p3 = %d\n",
*p1 , *p2 , *p3);
====================
*p1++是先输出*p1,再将p1向后移一个元素;
*++p2是p2先指向下个元素(&data[1]),在输出其内容;其实就是data[1] 的值
(*p3)++,则是先算出*p3的值,输出后再自增,所以现在p3还是指向moredata[0],其值增加1,即是301
zgy166 2004-09-06
  • 打赏
  • 举报
回复
*p1++ :先取值,再自加;
*++p1:先自加,再取值。
xjp6688 2004-09-06
  • 打赏
  • 举报
回复
*p1 = 100,*p1++的意思先得到100,之后在++,明白?
  • 打赏
  • 举报
回复
*p1++
====> *p1;
p1 ++

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧