Skip to content

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。