Я смущен слайдами в моем курсе C++. С одной стороны, в примере 1 int (* foo) [5] является указателем на целочисленный массив из 5 элементов, но в примере 2 int (* numbers2) [4] указывает на массив массивов (4 массива) типа integer. Как эти два имеют одну и ту же декларацию lefthand, но имеют разные типы?Указатели Confusion в C++
#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 int [numRows]' return 'int *'. Поэтому, когда вы выделяете массив массива, вы получаете указатель на массив или 'int (*) [4]' (в вашем конкретном случае). –
«int *» может указывать на одно целое число или на адрес первого элемента массива целых чисел. То же самое относится к указателю на массив. Он может указывать на один массив или адрес первого элемента массива массивов. – Galik