I am confused by the slides in my c++ course. On the one hand in Example 1 int(*foo)[5] is a pointer to an integer array of 5 elements, but in Example 2 int(*numbers2)[4] points to an array of arrays (4 arrays) of type integer. How can these two have the same lefthand declaration but hold different types?
#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;
}
 
     
     
    