我对c++课程中的幻灯片感到困惑。一方面,在示例1中,int(*foo)[5]是指向包含5个元素的整数数组的指针,但在示例2中,int(*numbers2)[4]指向类型为整数的数组(4个数组)的数组。这两个如何拥有相同的左手声明但持有不同的类型?
#include <iostream>
using std::cout;
using std::endl;
int main() {
//Example1
int numbers[5] = { 1,2,3,4,5 };
int(*foo)[5] = &numbers;
int *foo1 = *foo;
//Example2
int numRows = 3;
int(*numbers2)[4] = new int[numRows][4];
delete[] numbers2;
return 0;
}
numbers2
指向动态数组的第一个元素。这就是new
表达式的工作原理。 - Kerrek SBnew int[numRows]
会返回int*
。因此,当你分配一个数组的数组时,你会得到一个指向数组的指针,或者在你的特定情况下是int (*)[4]
。 - Some programmer dudeint*
可以指向单个整数或整数数组的第一个元素的地址。同样,指向数组的指针也是如此。它可以指向单个数组或者数组数组的第一个元素的地址。 - Galik