【发布时间】:2011-06-07 20:10:51
【问题描述】:
同样,什么会 *ptr += 1 *ptr % 8, 和 *点 / 8 是吗?
这些差异似乎令人困惑。 这是否可能依赖于编译器?
【问题讨论】:
-
为什么
1 + 2 * 2是 5 而不是 6? -
有趣的是,每个人都设法找到指向“运算符优先级”页面的不同链接。
标签: c
同样,什么会 *ptr += 1 *ptr % 8, 和 *点 / 8 是吗?
这些差异似乎令人困惑。 这是否可能依赖于编译器?
【问题讨论】:
1 + 2 * 2 是 5 而不是 6?
标签: c
它与运算符优先级有关。 * 运算符的优先级低于 ++,因此它出现在最后。
这是列出所有运算符的 Wikipedia 图表:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence
您可以在图表中看到后缀 ++ 的优先级为 2,而 * 的取消引用的优先级为 3。(数字稍微向后,因为数字越小优先级越高)。
【讨论】:
运算符优先级。 ++ 运算符比 * 运算符“绑定得更紧密”。
这是表格,按优先顺序排列。 http://isthe.com/chongo/tech/comp/c/c-precedence.html
这不依赖于编译器。它将始终以这种方式运行。
【讨论】:
因为优先级(这正是 C 的工作方式)。
C FAQ on the * exact * subject
后缀 ++ 和 -- 运算符 本质上具有更高的优先级 比前缀一元运算符。 因此,*p++ 等价于 *(p++);
【讨论】:
后缀 ++ 的优先级高于 * 运算符。它不依赖于编译器。
*ptr += 1 将 ptr 指向的值加一(或调用适当的重载运算符) *ptr % 8 将计算ptr指向的值除以8的余数 *ptr / 8 将计算ptr所指向的值与8的除法
【讨论】:
【讨论】:
这些差异似乎令人困惑。这是否可能依赖于编译器?
不,运算符的优先级在 c 语言规范中定义。 所以 *prt++ 总是在后增量发生之前延迟指针。
【讨论】: