c - 取消引用和后缀的优先级

标签 c operators operator-precedence

当我阅读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/

相关文章:

c - 程序没有产生结果

C - 查找字符数组中出现频率最高的元素

c++ - 从 C 为 Obj-C 结构赋值

c# - += 和 -= 运算符究竟如何解释?

php - 'AND' 与 '&&' 作为运算符

c++ - 将自定义数组传递给函数的问题 (c++)

C++ 如何将整数和长整型转换为 char 数组

c++ - 为什么编译器告诉我在 'if'和 'else if'语句中没有运算符与操作数类型匹配?

javascript - "=="的对象相等性的标准定义是什么?

带有整数枚举器的 Python bool 运算符成员资格测试