为什么啊,C语言

[复制链接]
查看11 | 回复3 | 2011-7-6 18:44:43 | 显示全部楼层 |阅读模式
5.main( )
{int a[ ]={1,2,3,4,5};
int *p=a ;
printf("%d\n",*++p);
printf("%d\n",*p++);
printf("%d\n", (*p)++);
printf("%d\n",++*p);
}

.
程序的执行结果为:

2
.

2
.

3
.

5
.

回复

使用道具 举报

千问 | 2011-7-6 18:44:43 | 显示全部楼层
这道题考了指针与数组,运算符优先级、结合性,自增运算符前后缀的差别首先是p初始化时指向了数组a的首个元素a[0],也就是1*++p等效于*(++p),p先自增一,也就是p指向了下一个元素,a[1],2,然后取出p所指内容,输出2*p++等效于*(p++),p先被引用,取内容,还是2,然后p自增一,指向a[2](*p)++,先取p指向的内容,a[2],对a[2]先引用,输出3,兜对a[2]自增一,也就是a[2]值变成了4++*p等效于++(*p),先引用a[2],此时a[2]是4,在对a[2]自增一,在输出,5...
回复

使用道具 举报

千问 | 2011-7-6 18:44:43 | 显示全部楼层
printf("%d\n",*++p);
p先自增,这时它指向a[1],而a[1]是2,所以第一个是2printf("%d\n",*p++);
先打印再自增,所以它打印的还是a[1],也就是2,之后它指向a[2]printf("%d\n", (*p)++); 这个和前面的不同,自增的是*p而不是p,也就是打印a[2]后a[2]再自增,...
回复

使用道具 举报

千问 | 2011-7-6 18:44:43 | 显示全部楼层
++p先完成自增再使用(此时指向a[1],输出2)p++先使用(此时还是指向a[1],输出2)再自增(此时指向a[2])*p取出a[2]的值,先使用(输出3),再将a[2]对应的值+1(a[2]=4)*p取出a[2]的值(此时为4),先将a[2]对应的值+1(此时a[2]=5),再使用(输出5)...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行