为什么* ptr ++表现得像*(ptr ++)而不是(* ptr)++?

时间:2011-06-07 20:10:52

标签: c

  

可能重复:
  ++ on a dereferenced pointer in C?

同样,会是什么 * ptr + = 1 * ptr%8,和 * ptr / 8 是

差异似乎令人困惑。 这可能是编译器依赖的吗?

7 个答案:

答案 0 :(得分:4)

它与运算符优先级有关。 *运算符的优先级低于++,因此它最后出现。

这是一张列出所有运营商的维基百科图表:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence

您可以在图表中看到,postfix ++的优先级为2,而*取消引用的优先级为3.(数字稍微向后,因为较低的数字具有较高的优先级)。< / p>

答案 1 :(得分:3)

运营商优先权。与++运算符相比,*运算符“绑定得更紧密”。

这是表格,按优先顺序排列。 http://isthe.com/chongo/tech/comp/c/c-precedence.html

这不依赖于编译器。它总会以这种方式运作。

答案 2 :(得分:2)

由于优先级(这就是C的工作原理)。

<强> C FAQ on the * exact * subject

  

后缀++和 - 运算符   基本上有更高的优先权   比前缀一元运算符。   因此,* p ++相当于   *(P ++);

答案 3 :(得分:2)

此链接有一个表格,指向C的运算符优先级规则。

答案 4 :(得分:2)

因为operator precedence

postfix ++的优先级高于*运算符。它不依赖于编译器。

* ptr + = 1会将ptr指向的值增加1(或调用适当的重载运算符) * ptr%8将计算ptr指向的值的余数除以8 * ptr / 8将计算ptr和8

指向的值的除法

答案 5 :(得分:1)

来自wikipedia

  

对于ISO C 1999标准,第6.5.6节注释71指出规范提供的C语法定义了C运算符的优先级

这意味着运算符优先级由C标准控制。

答案 6 :(得分:1)

差异似乎令人困惑。这可能是编译器依赖的吗?

不,运算符的优先级在c lang规范中定义。 等等* prt ++总是在后增量发生之前引用指针。