可能重复:
++ on a dereferenced pointer in C?为什么* ptr ++的行为像*(ptr ++)而不是(* ptr)++?
类似地,会是什么 * PTR + = 1 * PTR%8,和 * PTR/8 是?
差异似乎令人困惑。 这可能是编译器依赖的吗?
可能重复:
++ on a dereferenced pointer in C?为什么* ptr ++的行为像*(ptr ++)而不是(* ptr)++?
类似地,会是什么 * PTR + = 1 * PTR%8,和 * PTR/8 是?
差异似乎令人困惑。 这可能是编译器依赖的吗?
由于优先级(这就是C的工作原理)。
C FAQ on the * exact * subject
后缀++和 - 操作 本质上具有更高的优先级比 前缀元运算符。 因此,* p ++相当于 *(p ++);
运算符优先级。 ++
运算符与“运算符”绑定得更紧密“。
下面是按优先顺序排列的表格。 http://isthe.com/chongo/tech/comp/c/c-precedence.html
这不依赖编译器。它总是会这样。
它与运算符优先权有关。 *
运算符的优先级低于++
,因此它最后一次出现。
这里有一个维基百科图表,列出了所有的运营商:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence
您可以将图表后缀++
有2个,而*
解引用的优先级在看到有3.优先级(数字略有倒退,如较低的数字具有较高的优先级)。
该链路具有表给操作者优先级规则为C.
后缀的++具有比*运算符的优先级高。它不依赖于编译器。
* PTR + = 1会增加值所指向的ptr由一个(或调用相应的重载操作) * PTR%8将计算的值的余数由PTR除以指向8 * PTR/8将计算值的划分指向PTR和8
差异似乎令人困惑。这可能是编译器依赖的吗?
不,操作符的优先级在c lang规范中定义。 并且因此* prt ++总是在后增量发生之前引用指针。
为什么'1 + 2 * 2'5而不是6? – delnan 2011-06-07 20:12:04
[https://secure.wikimedia.org/wikipedia/en/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence] – icktoofay 2011-06-07 20:13:13
有趣的是,每个人都设法找到不同的“运营商优先级”链接,页面。 – Andrei 2011-06-07 20:15:29