注册 登录
编程论坛 C++教室

问个优先级的问题

夕野先生 发布于 2010-06-07 16:27, 609 次点击
    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 编辑 ]
7 回复
#2
夕野先生2010-06-07 17:21
没人吗???
#3
迷失的木桶2010-06-07 19:26
首先 ++ --有前置和后置,后置优先级在一元操作上是最低的。fun(i,++i)这个很难说,如果fun不是__stdcall方式的,简单点说就是参数入栈方式不同,那么结果不同,至于为什么书上是fun(3,3),你可以自己写代码求证。一般我对这类值迭代的操作都单独一行,性能上不会有任何损失。
#4
南国利剑2010-06-07 19:39
回复 楼主 夕野先生
你的分析是对的,结果也是没有问题的。
因为p++是先返回p的值然后才+1的啊。

再想想,是不是这样。呵呵
#5
夕野先生2010-06-08 13:05
呵呵谢谢版主,p++的问题我想明白了,但是第二个问题呢?是不是应该就是fun(4,4)?

也谢谢3楼的哥们啊~但我没太看懂。。。我是新手呵呵~~不好意思啊!
#6
南国利剑2010-06-08 13:42
回复 5楼 夕野先生
是的。应该是fun(4,4).
但是不同的编译器会有所不同。我用的是vc++6.0

顺便给你一个思考:fun(i++,i++)结果是什么呢?
i的初值仍然是3
#7
南国利剑2010-06-08 13:44
弄清楚这类问题是好的。但是自己编程的时候千万别用这种容易出错的语句。
#8
夕野先生2010-06-08 13:49
回复 7楼 南国利剑
嗯是的,我也觉得这种方式不是很好~但就是想理解。这么说是谭老师的书写错了~
你刚才说的那个问题我觉得应该是:fun(4,3)(前提:从右至左)
因为第一个右边的i++先返回值再递增,所以是3.而第二个(左边的i++),因为此时已经是i本身已经是4,所以先返回值再递增,应该还是4.
对吗?
1