ch6 Pointers & References
对于指针数组和数组指针的解读
指针数组和数组指针长的很像,很容易搞混。对于以下两种情况:
int *a[4]
:这是指针数组。int (*a)[4]
:这是数组指针。
简单的理解智能说加了括号是数组指针,不加括号是指针数组。
引用 chatgpt4 的解释: 分析技巧 - "右左法则"(Right-Left Rule): 从变量名称开始,向右读取直到遇到符号的末端,然后向左读取,直到整个声明被解释完毕。使用这个规则,你可以一步一步地分析复杂的声明。例如:
int *a[4]
:从a
开始,向右看到[4]
,说明a
是一个大小为 4 的数组;然后向左看到*
,说明数组的元素是指针;最终,这是一个指向 int 的指针数组。int (*a)[4]
:从a
开始,向右没有符号,然后向左看到(*)
,说明 a 是一个指针;接着向左看到[4]
,说明指针指向一个大小为 4 的数组;最终,这是一个指向包含 4 个 int 元素的数组的指针。
引用
引用就是别名,从这个角度来讲可以 很好的理解对于引用的使用。const int& a = b
,创建了 a 对于 b 的别名,同时这个 a 不能更改 b。