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

可能重复:
++对C中的解引用指针?

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

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

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

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

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

运算符优先级。 ++运算符“绑定”比*运算符更紧密。

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

这不依赖于编译器。 它总会以这种方式表现出来。

因为优先级(这就是C的工作原理)。

C关于* exact *主题的常见问题解答

后缀++和 – 运算符本质上比前缀一元运算符具有更高的优先级。 因此,* p ++相当于*(p ++);

因为运营商的优先权

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

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

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

  • C运算符优先级表

来自维基百科 :

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

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

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

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