您的位置:首页 > 其它

运算符优先级练习

2013-03-01 17:13 155 查看
执行以下语句会打印出?

int arr[] = {6, 7, 8, 9 ,10};
int* ptr = arr;
*(ptr++) += 123;
cout<<*ptr<<endl;


先看看运算符的优先级,一般容易考察的是红色的这几个:

PrecedenceOperatorDescriptionAssociativity
1
::
Scope resolutionLeft-to-right
2
++
--
Suffix/postfix increment and decrement (a++)
()
Function call
[]
Array subscripting
.
Element selection by reference
−>
Element selection through pointer
3
++
--
Prefix increment and decrement (++a)Right-to-left
+
Unary plus and minus
!
~
Logical NOT and bitwise NOT
(type)
Type cast
*
Indirection (dereference)
&
Address-of
sizeof
Size-of
new
,
new[]
Dynamic memory allocation
delete
,
delete[]
Dynamic memory deallocation
4
.*
->*
Pointer to memberLeft-to-right
5
*
/
%
Multiplication, division, and remainder
6
+
Addition and subtraction
7
<<
>>
Bitwise left shift and right shift
8
<
<=
For relational operators < and ≤ respectively
>
>=
For relational operators > and ≥ respectively
9
==
!=
For relational = and ≠ respectively
10
&
Bitwise AND
11
^
Bitwise XOR (exclusive or)
12
|
Bitwise OR (inclusive or)
13
&&
Logical AND
14
||
Logical OR
15
?:
Ternary conditionalRight-to-left
=
Direct assignment (provided by default for C++ classes)
+=
−=
Assignment by sum and difference
*=
/=
%=
Assignment by product, quotient, and remainder
<<=
>>=
Assignment by bitwise left shift and right shift
&=
^=
|=
Assignment by bitwise AND, XOR, and OR
16
throw
Throw operator (for exceptions)
17
,
CommaLeft-to-right

所以这句应该解释为:
*(ptr++) += 123;
*ptr = *ptr + 123; ptr++;  括号中的内容先执行,得到前一语句;ptr再进行自增;
ptr的自增应该是在第一条语句执行之后发生的,这样才合理,否则*(++ptr) += 123的执行结果就不好解释了,写编译器的人肯定也需要语句执行的结果合理才能自圆其说的!

答案: 7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: