2011-06-07 76 views
0

可能重复:
++ on a dereferenced pointer in C?为什么* ptr ++的行为像*(ptr ++)而不是(* ptr)++?

类似地,会是什么 * PTR + = 1 * PTR%8,和 * PTR/8 是?

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

+8

为什么'1 + 2 * 2'5而不是6? – delnan 2011-06-07 20:12:04

+0

[https://secure.wikimedia.org/wikipedia/en/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence] – icktoofay 2011-06-07 20:13:13

+2

有趣的是,每个人都设法找到不同的“运营商优先级”链接,页面。 – Andrei 2011-06-07 20:15:29

回答

2

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

C FAQ on the * exact * subject

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

4

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

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

您可以将图表后缀++有2个,而*解引用的优先级在看到有3.优先级(数字略有倒退,如较低的数字具有较高的优先级)。

2

因为operator precedence

后缀的++具有比*运算符的优先级高。它不依赖于编译器。

* PTR + = 1会增加值所指向的ptr由一个(或调用相应的重载操作) * PTR%8将计算的值的余数由PTR除以指向8 * PTR/8将计算值的划分指向PTR和8

1

wikipedia

对于ISO C 1999标准,部分6.5.6音符71点的状态,通过该规范定义提供的C语法C运营商的优先级

这意味着运算符优先级由C标准管理。

1

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

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

相关问题