关于优先级的有关问题
关于优先级的问题C/C++ codeStatus Push(SqStack &S, SElemType e){if (S.top - S.base S.stack_size){
关于优先级的问题
C/C++ codeStatus 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);
[解决办法][解决办法]也只有高手的代码喜欢写成这样
[解决办法]++,--操作符作为前置和后置的优先级是相同的,和 * 都是一个优先级,这时要看结合率
*p++; 单目操作符的结合率从右到左,所以++的操作树是 指针p; 但后置的结果体现在下一句,因此 *操作是的指针仍指向原处
*p++ 等价于 *(p++)等价于 *p; p++;
[解决办法][解决办法]前置右结合,优先级低于后置;后置左结合,优先级更高。
写句不好的代码
*++++p++++
就是
*(++(++( (p++)++) ))
这反映出一个核心原则——由内到外!
[解决办法]请参考《C++ Prime》第四版 P141