微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

*p++和(*p)++的区别是什么

“*p++”和“(*p)++”的区别是:1、“*p++”示取p所指单元的值,p指向下一单元,即p自加1。“*p++”是指下一个地址。2、“(*p)++”是指将*p所指的数据的值加一。

本教程操作环境:windows7系统、C++17版本、Dell G3电脑。

区别:

1、*p++示取p所指单元的值,p指向下一单元,即p自加1。*p++是指下一个地址。

2、(*p)++是指将*p所指的数据的值加一。

C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,和*(p++)意思一样;在(*p)++中,由于()的优先级比*和++都高,所以++作用在()内的表达式*p上。

比如有:

int x,y,a[]={1,2,3,4,5},*p=a,*q=a;

x=*p++;//执行这一句后x=a[0]=1,p=a+1

y=(*q)++;//执行这一句后,y=a[0]+1=2,q仍然=a

扩展资料:

验证程序1

#includestdio.h
void main()
{
int a=2;
int*p=&a;
int*pold;//记录P指向的地址,为了作为比较使用
pold=p;
//-----------原来的信息
printf(原来的a=%d,a);
printf(原来的p=%x,p);
printf(原来的pold=%x,pold);
//----------进行变化
printf(*p++的结果=%d,a的结果a=%d,*p++,a);
printf(地址变化的结果p-pold=%x,p-pold);
}

程序2

#includestdio.h
void main()
{
int a=2,*p=&a,*q=&a;
printf(%d%d,(*p),a);
printf(%d%d%d%d,(*p)++,*p++,*q++,a);
printf(%d,a);
}

程序3:

#includestdio.h
void main()
{
int a=2,*p=&a,*q=&a;
printf(%d%d,(*p),a);
printf(%d%d%d,*p++,(*p)++,*q++);
p=&a;q=&a;
printf(%d%d%d%d,a,*p,(*q)++,a);
printf(%d%d%d%d,a,++(*p),++(*q),a);
printf(%d,a);
}

综上所述:

*p++是先取出*p的值,然后让p++

(*p)++是先取出*p的值,让这个值++

*(P++)是先取出*p的值,让p++

所以,*p++等价于*(P++)

而且printf的运行顺序是从右向左运行。而且右++是在整个运算表达式运算完才进行,而且右++的执行顺序是从左到右进行。而左++遇到变量就会立即增加变量的值。

验证printf的运算顺序

#includestdio.h
void main()
{
int a=2;
printf(a++=%d,++a=%d,a++=%d,a++,++a,a++);
printf(a=%d,a);
}

推荐教程:《C#

原文地址:https://www.jb51.cc/csharp/1192459.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐