注册 登录
编程论坛 数据结构与算法

*和++的问题~~~

TGM316750432 发布于 2010-10-13 21:05, 678 次点击
*S.top++=e  为什么执行的是{*S.top=e;S.top++;}而不是{*S.top=e;(*S.top)++(也即是e++);}?
8 回复
#2
书呆2010-10-13 23:17
++的优先级比*高,所以S.top是和++结合的。
#3
niufujun2010-10-14 00:04
在c里++和*的优先级是一样的,结合性是从右到左;在c++里++的优先级比*高,所以S.top是和++结合的。
#4
寒风中的细雨2010-10-14 18:48
这个 分两个方向理解 *s.top++首先 方向没有变  右边的++ 先做 再*  但是要注意*s.top++ 连接起来 总共的作用次数就是一次
这主要的区别可以 看下这种情况:s.top++/++s.top;  *s.top;不管前面第一个语句是哪个后面的得出来的结果 都是改变啦 可以
理解成事作用啦两次(具体用什么名词表示也不记得啦)
欢迎指正
#5
TGM3167504322010-10-15 21:05
回复 2楼 书呆
如果是++优先级高于*  那么就应该是{S.top++;*S.top=e;},这和{*S.top=e;S.top++;}是不一样的  ??
#6
TGM3167504322010-10-15 21:10
回复 4楼 寒风中的细雨
你说的好像也是++优先级高于*  那么和楼上一样,拆开执行的话也是{S.top++;*S.top=e;}啊,还望说的再明白些
#7
makebest2010-10-15 22:39
用起来容易出错, 讨论这些技巧感觉没意思.
#8
寒风中的细雨2010-10-15 23:49
回复 6楼 TGM316750432
优先级是一样的情况下  运算符 是有执行循序的(左到右 或是 右到左)
所以你要理解 *(指针运算符), 和++  这两个 的结合性是 怎样的。

后 就是 理解 s.top++   和 ++s.top   有什么区别 再是 前面带与 * 相结合的情况

1. *和++ 二者 的优先级是一样的(c语言是如此 相信c++也应该是 因为 是向下兼容的)
2. 二者都是自右到左所以1.* s.top ++和* ++ s.top都是先做 ++ 的 所以做完这两个操作后
    加的都只是地址值 然后 * 解引用 所以 不可能是你的那个变量值自增1 ,它增加的只是变量地址的值
3.然后 理解 前++ (++s.top) 和 后++ (s.top++),前++ 可以理解成对本条语句的变量(自增变量)值有增加,
    后++ 可以理解成对本条语句的变量值(自增变量)没有影响。
    来个列子:
        int i = 1;
        i++; 此条语句中的i 为1(本条语句)
        cout << i<< endl;此时i 为2 (下条语句)

        int j = 1;
        ++j;j为2(本条语句)
        cout << j<<endl; (下条语句)
4.最后要理解的 是 语句 的定义。
        *s.top++; 是一条语句;
        *++s.top; 是一条语句;
#9
寒风中的细雨2010-10-15 23:51
欢迎指正
1