当我阅读K&R的TCPL时,我只是无法理解两个表达:
*p++ = val; /*push val onto stack */
这是我的想法:
解引用和后缀具有相同的优先级,并且关联性是从右到左的,所以
*p++ = val
可能和*(p++) = val
一样,因为指针通常是指向top的下一个位置,所以在这段代码中,p由于括号的缘故,先增加 1,所以 p 是当前顶部上方的两个单位,而不是当前顶部上方的一个单位,val 应该在哪里!!!谢谢
最佳答案
前缀自增/自减和解引用运算符优先级相等,但后缀运算符优先级更高,所以*p++
与*(p++)
相同,即就像写 *p = val; p++;
如果您编写 (*p)++ = val
,它不会编译,因为您会尝试为数字赋值。
关于c - 取消引用和后缀的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15345396/