C语言问题

[复制链接]
查看11 | 回复5 | 2011-9-2 08:56:44 | 显示全部楼层 |阅读模式

int *p, a[]={10,20,30};
p=&a[1];
则表达式++*p--执行的结果是?
请告诉我具体的计算步骤,谢谢。
也就是说先赋值后加减的意思是p自减后的获得的值不参与本段语句的运算是么?

回复

使用道具 举报

千问 | 2011-9-2 08:56:44 | 显示全部楼层
结果是21首先,++ * --按照优先级和结合性,应当是从右向左依次运算的,所以相当于++(*(p--))p先执行p--,此时p==&a[0],但是p--的值(表达式的值)仍等于&a[1]然后执行*运算,取出所指内容,20最后执行++使得20自增为21.语句执行之后,p的值等于&a[0]...
回复

使用道具 举报

千问 | 2011-9-2 08:56:44 | 显示全部楼层
++*p-- = 21...
回复

使用道具 举报

千问 | 2011-9-2 08:56:44 | 显示全部楼层
答案21a[1]=20,*p=20;++*p=21(*p--)=21 后缀--是在执行表达式(++*p--) 之后*p才变成20...
回复

使用道具 举报

千问 | 2011-9-2 08:56:44 | 显示全部楼层
先执行*p,*p = *(&a[1])=20;在执行++*p 20+1=21++*p--等价于(++(*p))-- p--p的值并没有改变;还是21...
回复

使用道具 举报

千问 | 2011-9-2 08:56:44 | 显示全部楼层
21...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行