简体   繁体   中英

Pointers Confusion in C++

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;

}

Check pointer declaration reference :

Because of the array-to-pointer implicit conversion, pointer to the first element of an array can be initialized with an expression of array type:

 int a[2]; int* p1 = a; // pointer to the first element a[0] (an int) of the array a int b[6][3][8]; int (*p2)[3][8] = b; // pointer to the first element b[0] of the array b, // which is an array of 3 arrays of 8 ints

So essentially speaking what lefthand numbers2 and foo point to on the right hand side matters.

So in following numbers2 point to first element of temporary (yet unnamed) array which is an array of numRows arrays of 4 ints

 int(*numbers2)[4] = new int[numRows][4];

While foo points to first element of numbers which is an array of 5 ints

int(*foo)[5] = &numbers;

The description in your question of example 2 is not exactly correct.

Try phrasing like this and you will see the parallelism.

  • foo is a pointer to the first object, each object is an integer array of 5 elements. (As it turns out, the first one is the only one)
  • numbers2 is a pointer to the first object, each object is an integer array of 4 elements. (As it turns out, there are a total of numRows of them)

A pointer data type doesn't tell you the number of objects it points to, only the type of each one.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM