若已定义:int a[]={1,2,3},*p=a;则执行*p++=5;(*p)++;后a[0],a[1],a[2]的值依次是()。

[复制链接]
查看11 | 回复5 | 2012-12-29 20:41:12 | 显示全部楼层 |阅读模式
#includevoid main(){int a[]={1,2,3};int *p;p=a;*p++=5;(*p)++;printf("%d%d%d",a[0],a[1],a[2]);}5
3
3*、++、--等单目运算符都是右结合,也就是说*p++相当于*(p++),即先把5赋值给*p(a[0],a[0]=5),再把p指向a[1](p=&a[1]),然后(*p)++就相当于(a[1]++,即a[1=3]),最后依次输出a[0]、a[1]、a[2]当然是5 3
3了。...
回复

使用道具 举报

千问 | 2012-12-29 20:41:12 | 显示全部楼层
其实这里面的重点就是*,++的优先级问题,还有p++的意思是先用后加,问题是加了多少个字节,实际是一个int型所占有的字节,一般是4,也有可能是8,再不行的话,自己可以用一些图形化界面的编译器debug一下...
回复

使用道具 举报

千问 | 2012-12-29 20:41:12 | 显示全部楼层
p++值是p,但是p+=1了。所以a[0]=5。然后p指向的内容,就是a[1]+=1了。...
回复

使用道具 举报

千问 | 2012-12-29 20:41:12 | 显示全部楼层
5 3 3*p=a指p=&a[0]*p++=5指*p=5,p=p+1,即a[0]=5。此时p=&a[1](*p)++就相当于a[1]++,即a[1]=3a[2]不变...
回复

使用道具 举报

千问 | 2012-12-29 20:41:12 | 显示全部楼层
好像是5 3 3...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行