C++ | 理解复杂的数组声明
先来一段代码。
int *A[10]; // A是含有10个整型指针的数组 int &refA[10] = /* ? */; // 错误:不存在引用的数组 int (*pA)[10] = &arr; // pA指向一个含有10个整数的数组 int (&refB)[10] = arr; // refB引用一个含有10个整数的数组 int *(&refC)[10] = A; // refC是数组的引用,引用一个含有10个指针的数组
对于简单的数组声明int *A[10];我们可以用从右向左的读法,即从[10]可以知道声明的是一个有10个元素的数组,再向左看知道数组名叫A,再向左,看到操作符*,知道数组中存放的是指针,再向左看到int,知道数组中存放指针是指向int。
理解复杂的数组声明我们用由内向外的顺序来读。
以int (*pA)[10] = &arr;为例,首先小括号部分*pA表示pA是一个指针对象,接下来观察右边则可以知道pA是一个指向大小为10的数组的指针,最后观察左边,知道数组中的元素是int。
同样的方法理解int (&refB)[10] = arr;首先小括号部分&refB表示refB是一个引用,接下来观察右边则可以知道refB引用的是大小为10的数组,最后观察左边,知道数组中的元素是int。
同样的方法理解int *(&a)[10] = A;首先小括号部分&refC表示refC是一个引用,接下来观察右边则可以知道refC引用的是大小为10的数组,最后观察左边,知道数组中的元素是指向int 类型的指针。
#c++##c++数组#