*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#

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...