在 C/C++ 中,*
、->
、前后 ++
和 &
这些运算符的优先级和结合性是理解代码行为的关键。下面我将详细梳理这些运算符的优先级、结合性以及如何正确理解它们的组合。
1. 优先级和结合性
我们从优先级表上整理出这些运算符的优先级顺序:
*
(解引用运算符)和&
(取地址运算符):优先级比较高。->
(成员访问运算符)优先级高于前后++
运算符。- 前后
++
运算符的优先级比较低,且++
运算符的结合性是从右到左的。
运算符的优先级和结合性总结:
-
*
(解引用)和&
(取地址)优先级:高于++
和->
,它们在指针操作中涉及到获取地址或访问指向对象的值。 -
++
运算符(前++ 和 后++):优先级较低,后++(i++
)的优先级高于 前++(++i
)运算符,但它们的结合性是从右到左的。 -
->
运算符:优先级高于++
,但是低于&
和*
。
2. 不同组合时的考虑
组合1: *++ptr
假设 ptr
是一个指针,*
和 ++
的组合:
++ptr
先执行,这意味着指针会先增加 1。- 然后
*
对增加后的指针进行解引用,返回指针所指向的新地址的值。
执行顺序:
ptr++
(增加指针地址)*ptr
(对增加后的指针解引用)
int arr[] = {
1, 2,