c语言中*p++,*(++p)的问题
我看网上说:C编译器认为*和++是同优先级操作符,且都是从右向左结合的,所以*p++中的++只作用在p上。但是我现在的疑问是,既然是从右向左结合的,为什么不是:先执行p+...
我看网上说:
C编译器认为 * 和++是同优先级操作符,且都是从右向左结合的,所以*p++中的++只作用在p上。
但是我现在的疑问是,既然是从右向左结合的,为什么不是:
先执行p++,然后获取*(p++)这个值呢?
而现在成了 先p++,再执行*p呢? 展开
C编译器认为 * 和++是同优先级操作符,且都是从右向左结合的,所以*p++中的++只作用在p上。
但是我现在的疑问是,既然是从右向左结合的,为什么不是:
先执行p++,然后获取*(p++)这个值呢?
而现在成了 先p++,再执行*p呢? 展开
4个回答
展开全部
*p++本来就等同于*(p++)。只是因为是后置自增,才先使用p的当前值,然后p自增。
假设p是指向int类型的指针,则int n=*p++;和int n=*(p++);都相当于是这样执行的:
int n=*p;
p++;
假设p是指向int类型的指针,则int n=*p++;和int n=*(p++);都相当于是这样执行的:
int n=*p;
p++;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
优先级已经说明了,*p++等价于*(p++),而括号里的p++的计算结果就是p,外面的*与这个p不就是*p了吗。这就是字面上的理解了。编译器的实现可以等价表示为一个逗号表达式(*temp=*p,p=p+1,*temp),即最终结果就是p指向的初始值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
运算符的优先级太多了,通常不去经常记忆都会忘记,其实这种问题没什么好纠结的,在自己写代码时,哪里想优先执行就在那里加括号,这样是最保险的,根本就不用去考虑这种优先级问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询