为什么得出的结果是2,3

[复制链接]
查看11 | 回复3 | 2011-3-15 11:21:26 | 显示全部楼层 |阅读模式
#include
struct ord
{int x,y;}dt[2]={1,2,3,4};
main()
{struct ord *p=dt;
printf("%d",++p->x);
printf("%d\n",++p->y);}为什么得出的结果是2,3

回复

使用道具 举报

千问 | 2011-3-15 11:21:26 | 显示全部楼层
因为 -> 的优先级高于 ++ ,所以会先取 x、y的值,再自增。也就是 2、3..你只要记住在 C 语言中, () 、[ ] 、-> 、 . (点)这四个运算符的优先级是最高的。。 ++p->x ,指针的所指向的位置并没有改变,而是 x 的值加 1 。。
回复

使用道具 举报

千问 | 2011-3-15 11:21:26 | 显示全部楼层
你加上括号,重新规范书写,如下,就清楚了:struct ord{int x; int y;};//struct ord dt[2]={1,2,3,4};struct ord dt[2];main(){ dt[0].x = 1; dt[0].y = 2; dt[1].x = 3; dt[1].y = 4 ;
回复

使用道具 举报

千问 | 2011-3-15 11:21:26 | 显示全部楼层
++是前致运算伏 先运算++ 此时p后移一位p->x 自然是2了然后又运算++又后移动一位自然是3了
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行