I know that the common technique of creating a dynamic array using new in C++ is:
int * arr = new int[5];
A book also says:
short tell[10]; // tell is an array of 20 bytes
cout << tell << endl; // displays &tell[0]
cout << &tell << endl; // displays address of the whole array
short (*p)[10] = &tell; // p points to an array of 20 shorts
Now I wonder if there is a way to allocate memory for an array using new, so it can be then assigned to a pointer to the whole array. It might look like this:
int (*p)[5] = new int[5];
The above example doesn't work. The left side looks correct to me. But I don't know what should be on the right.
My intention is to understand if it's possible. And I know that there are std::vector and std::array.
Update:
Here is what I actually wanted to check:
int (*p1)[5] = (int (*)[5]) new int[5];
// size of the whole array
cout << "sizeof(*p1) = " << sizeof(*p1) << endl;
int * p2 = new int[5];
// size of the first element
cout << "sizeof(*p2) = " << sizeof(*p2) << endl;
And here is how to access these arrays:
memset(*p1, 0, sizeof(*p1));
cout << "p1[0] = " << (*p1)[0] << endl;
memset(p2, 0, sizeof(*p2) * 5);
cout << "p2[0] = " << p2[0] << endl;