c语言中*p++和(*p)++有什么区别?
#include<stdio.h>voidmain(){intx=3;int*p,*q;p=&x,q=&x;printf("%d\n",*p++);printf("%d\...
#include <stdio.h>
void main()
{
int x=3;
int *p,*q;
p=&x,q=&x;
printf("%d\n",*p++);
printf("%d\n",(*q)++);
printf("%d\n",x);
}
输出结果为:3,3,4;
我看书中解释:*p++:是先取出*p的值,再使p加1
(*p)++:是使*p的值加1.
所以我觉得是:3,4,4
求各位能帮我解释下,谢谢了! 展开
void main()
{
int x=3;
int *p,*q;
p=&x,q=&x;
printf("%d\n",*p++);
printf("%d\n",(*q)++);
printf("%d\n",x);
}
输出结果为:3,3,4;
我看书中解释:*p++:是先取出*p的值,再使p加1
(*p)++:是使*p的值加1.
所以我觉得是:3,4,4
求各位能帮我解释下,谢谢了! 展开
14个回答
展开全部
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这些人回答的,一群小屁孩蹭经验的吧?这个题就应该是3,3,4.①printf("%d\n",*p++);p指针地址加一,所以x还是3。②printf("%d\n",(*q)++);指针内容加一,但是注意是后加加,此时指针输出的内容还是之前状态x=3的。③最后printf("%d\n",x);,此时经过②指针内容已被加1,因为这个类似引用,故可指针可改变原来内容,原x也是4;如果你想出现3,4,4的答案第二个应该是++(*q)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
后自增操作符总是先把原值赋值给表达式,然后完成自增操作的
所以printf("%d\n",*p++);相当于printf("%d\n",*p);p++;
而printf("%d\n",(*q)++);相当于printf("%d\n",*q);(*q)++
所以答案应该是3,3,4
所以printf("%d\n",*p++);相当于printf("%d\n",*p);p++;
而printf("%d\n",(*q)++);相当于printf("%d\n",*q);(*q)++
所以答案应该是3,3,4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询