*p++与(*p)++有什么区别
7个回答
展开全部
楼主可以去看看c语言优先级有关的知识。首先*p++等价于*(p++)。至于为什么会等价呢?根据c语言的优先级。*与++的优先级同处在第二级别上。他们的优先级是一样的,又因为处在第二级别的优先级运算符是结合方向是从右到左,所以当出现*p++这样的表达式的时候,根据优先级别相同,并且结合方向是从右到左,所以就等价于*(p++)了。那么也就是,先将p指针移动到下个p指针所指向元素的地址的下一个地址,然后再对那个地址取值。(*p)++是取p所指向地址的值,然后再将这个值+1.这里举个例子,比如
int a[2]={1,10};
int *p=a;
*p++//的结果就是等于数组的第二个元素10.
(*p)++//的结果就是1+1=2.
楼主,我这样解释,把意思讲明白了么?
int a[2]={1,10};
int *p=a;
*p++//的结果就是等于数组的第二个元素10.
(*p)++//的结果就是1+1=2.
楼主,我这样解释,把意思讲明白了么?
展开全部
*p++是使指针变量p本身增1。
(*p)++是使指针所指的存储单元的内容增1。
(*p)++是使指针所指的存储单元的内容增1。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个是指针的位置自增,一个是自增后作为新的指针地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个是指针偏移一位(看数据类型和平台)然后取值,
第二个是指针指向内存存储的值自增。
第二个是指针指向内存存储的值自增。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询