凌彦慧 发表于 2025-6-4 19:43:35

C++中指针和数组相关的运算符优先级

概述

本文深入介绍了与指针和数组相关的运算符优先级,利用代码示例展示了当左结合和右结合运算符同时存在时的结合方式,同时也演示了如何使用()来强制人为指定结合顺序。
指针、数组相关的运算符优先级

下表展示了相关运算符的优先级,有4个级别,同级别内的运算符按照结合性依次调用。这4类也是所有运算符中优先级最高的4档,其它的运算符优先级都比它们低:
优先级运算符描述结合性1::作用域解析左结合2()
[]
.
->强制运算结合,函数形参列表
数组元素下标访问
类的成员访问
类指针的成员访问右结合3(int)
*
&强制转换
指针解引用
变量取地址左结合4.*
->*类的成员函数指针
类指针的成员函数指针左结合容易产生困惑的、需要仔细进行优先级判断的往往是一个左结合加一个右结合,例如:

[*]*ptr[]
[*](int)a()
[*]&obj->data
[*]obj->*fun()
请记住一个重要方法:当我们需要改变运算符的结合顺序(C++默认的优先级不是我们的意愿)时,可以通过添加()来人为强制指定优先顺序,因为()是除了::以外具有最高优先级的一类运算符。
简单例子:以[]和*为例探讨运算符结合规律

下面的p1, p2是数组,p3是指针:
int *p1;    // p1是一个数组,元素个数为2,每个元素为(int*)
int *(p2);// 等价于*p2,p2是一个数组
int (*p3);// p3是一个指针,指向一个int数组,这个int数组的元素个数必须是2!因此只要记住两点即可:

[*][]的优先级高于*:即*p1和*(p1)等价。
[*]这个优先级同时适用于定义语句(*为指针定义符)和执行语句(*为解引用符)中:
int *p1;    // 定义语句:先看[]:p1是一个数组,元素个数为2,每个元素为(int*)。等价于*(p1)int (*p2);// 定义语句:先看*: p2是一个指针,指向一个int数组,这个int数组的元素个数必须是2!cout

怀陶宁 发表于 2025-10-14 00:40:50

谢谢分享,试用一下

艾曼语 发表于 2025-12-6 17:37:18

这个有用。

粒浊 发表于 2025-12-14 19:09:23

感谢分享,学习下。

方子楠 发表于 2025-12-16 01:36:03

收藏一下   不知道什么时候能用到

固拆棚 发表于 2026-1-21 10:30:47

谢谢楼主提供!

阙忆然 发表于 2026-1-21 19:11:12

鼓励转贴优秀软件安全工具和文档!

迎脾 发表于 2026-1-23 07:50:00

东西不错很实用谢谢分享

铜坠匍 发表于 2026-1-23 08:35:00

新版吗?好像是停更了吧。

拼潦 发表于 2026-1-24 07:20:57

喜欢鼓捣这些软件,现在用得少,谢谢分享!

琶轮 发表于 2026-1-24 11:43:15

前排留名,哈哈哈

瞿佳悦 发表于 2026-2-4 15:17:20

感谢,下载保存了

喳谍 发表于 2026-2-7 08:44:33

热心回复!

鞍注塔 发表于 2026-2-8 01:38:02

收藏一下   不知道什么时候能用到

赐度虻 发表于 2026-2-8 04:06:43

不错,里面软件多更新就更好了

镝赋洧 发表于 2026-2-8 10:29:07

鼓励转贴优秀软件安全工具和文档!

沦嘻亟 发表于 2026-2-9 23:13:28

很好很强大我过来先占个楼 待编辑

曲愍糙 发表于 2026-2-10 22:58:54

感谢,下载保存了

茹静曼 发表于 2026-2-11 03:52:28

这个好,看起来很实用

艋佰傧 发表于 2026-2-11 05:55:14

不错,里面软件多更新就更好了
页: [1] 2
查看完整版本: C++中指针和数组相关的运算符优先级