| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:问个优先级的问题
只看楼主 加入收藏
夕野先生
Rank: 1
来 自:北京
等 级:新手上路
帖 子:24
专家分:8
注 册:2008-12-1
结帖率:100%
收藏
已结贴  问题点数:3 回复次数:7 
问个优先级的问题
    int a[10];
    int i,*p=a;

    for(i=0;i<10;i++)
        cin>>*(p+i);

    for(p=a;p<(a+10);)
        cout<<*p++<<' ';
红色部分:*于++是同一优先级,应该遵循从右至左的规律,所以应该是先算p++,然后再算*p++的值才对啊?
但是为什么输出以后是按着先*p后p++来计算???

令外,看谭老师的书,里面提到,调用fun(i,++i)函数,许多C++系统(如GCC)是按从右至左的顺序求值,那如果i初值等于3的话,应该是fun(4,4)啊?但是书上写的是fun(3,3)

求解谢谢!:)

[ 本帖最后由 夕野先生 于 2010-6-7 16:50 编辑 ]
搜索更多相关主题的帖子: 优先级 
2010-06-07 16:27
夕野先生
Rank: 1
来 自:北京
等 级:新手上路
帖 子:24
专家分:8
注 册:2008-12-1
收藏
得分:0 
没人吗???
2010-06-07 17:21
迷失的木桶
Rank: 4
等 级:业余侠客
帖 子:52
专家分:230
注 册:2010-5-29
收藏
得分:0 
首先 ++ --有前置和后置,后置优先级在一元操作上是最低的。fun(i,++i)这个很难说,如果fun不是__stdcall方式的,简单点说就是参数入栈方式不同,那么结果不同,至于为什么书上是fun(3,3),你可以自己写代码求证。一般我对这类值迭代的操作都单独一行,性能上不会有任何损失。
2010-06-07 19:26
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:3 
回复 楼主 夕野先生
你的分析是对的,结果也是没有问题的。
因为p++是先返回p的值然后才+1的啊。

再想想,是不是这样。呵呵

南国利剑
2010-06-07 19:39
夕野先生
Rank: 1
来 自:北京
等 级:新手上路
帖 子:24
专家分:8
注 册:2008-12-1
收藏
得分:0 
呵呵谢谢版主,p++的问题我想明白了,但是第二个问题呢?是不是应该就是fun(4,4)?

也谢谢3楼的哥们啊~但我没太看懂。。。我是新手呵呵~~不好意思啊!
2010-06-08 13:05
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 5楼 夕野先生
是的。应该是fun(4,4).
但是不同的编译器会有所不同。我用的是vc++6.0

顺便给你一个思考:fun(i++,i++)结果是什么呢?
i的初值仍然是3

南国利剑
2010-06-08 13:42
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
弄清楚这类问题是好的。但是自己编程的时候千万别用这种容易出错的语句。

南国利剑
2010-06-08 13:44
夕野先生
Rank: 1
来 自:北京
等 级:新手上路
帖 子:24
专家分:8
注 册:2008-12-1
收藏
得分:0 
回复 7楼 南国利剑
嗯是的,我也觉得这种方式不是很好~但就是想理解。这么说是谭老师的书写错了~
你刚才说的那个问题我觉得应该是:fun(4,3)(前提:从右至左)
因为第一个右边的i++先返回值再递增,所以是3.而第二个(左边的i++),因为此时已经是i本身已经是4,所以先返回值再递增,应该还是4.
对吗?
2010-06-08 13:49
快速回复:问个优先级的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024012 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved