首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于优先级的有关问题

2012-04-19 
关于优先级的问题C/C++ codeStatus Push(SqStack &S, SElemType e){if (S.top - S.base S.stack_size){

关于优先级的问题

C/C++ code
Status Push(SqStack &S, SElemType e){    if (S.top - S.base >= S.stack_size)    {        S.base = (SElemType *)realloc(S.base, (S.stack_size + STACK_INCREMENT * sizeof(SElemType)));        if (!S.base)            exit(OVERFLOW);        S.top = S.stack_size + S.base;        S.stack_size += STACK_INCREMENT;    }    *S.top++ = e;    return OK;}Status  Pop(SqStack &S, SElemType *e){    if (S.base == S.top)    {        printf("The stack is empty!\n");        return ERROR;    }    *e = *--S.top;    return OK;}


上面是压栈和出栈的代码 其中*S.top++ = e; *e = *--S.top; 是什么意思 * 和-- ++ 那个优先级高啊?
求教各位大牛。



[解决办法]
++,--操作符作为前缀和后缀的优先级是不同的,后缀比前缀高一级,前缀和*一样,也就是后缀自增自减操作符的优先级比*高。
[解决办法]
++的优先级更高。
*S.top++ = e; 
==>
*(S.top)=e;
S.top++;

e = *--S.top;
==>
--S.top
e=*(S.top);
[解决办法]
探讨

也就是 说
*S.top++ = e; 和(*S.top)++ = e;是不一样的
而和 *(S.top++) = e;是等价的?

[解决办法]
也只有高手的代码喜欢写成这样
[解决办法]
++,--操作符作为前置和后置的优先级是相同的,和 * 都是一个优先级,这时要看结合率

*p++; 单目操作符的结合率从右到左,所以++的操作树是 指针p; 但后置的结果体现在下一句,因此 *操作是的指针仍指向原处

*p++ 等价于 *(p++)等价于 *p; p++;
[解决办法]
探讨

++,--操作符作为前置和后置的优先级是相同的,和 * 都是一个优先级,这时要看结合率

*p++; 单目操作符的结合率从右到左,所以++的操作树是 指针p; 但后置的结果体现在下一句,因此 *操作是的指针仍指向原处

*p++ 等价于 *(p++)等价于 *p; p++;

[解决办法]
前置右结合,优先级低于后置;后置左结合,优先级更高。
写句不好的代码
*++++p++++
就是
*(++(++( (p++)++) ))
这反映出一个核心原则——由内到外!
[解决办法]
请参考《C++ Prime》第四版 P141

热点排行