from my understanding when we create array using pointers like this
int **ptr = new int*[2];
for(int i=0;i<2;i++)
{
ptr[i] = new int[3];
}
it would look something like this
but when we create a static array like this
int arr[2][3]={1,2,3,4,5,6);
and now if we run the following code
cout<<"Address of arr = "<<&arr;
cout<<"arr is pointing to = "<<*arr;
it shows the same address, which means arr is pointer which is pointing to itself, which seems very confusing because if array is double pointer then how can it point to itself.
clearly compiler is doing some odd things behind the scene. could you please explain how this works.
it shows the same address, which means arr is pointer which is pointing to itself
No, it doesn't mean that. What it means is that the address of arr
is the same as the address of arr[0][0]
. This makes perfect sense, because arr[0][0]
is part of arr
, and is in fact at the very beginning of it. Similarly, you will find my left arm in the exact same location as you will find me.
The difference between &arr
and *arr
is the type. &arr
is of type int (*)[2][3]
(pointer to an array of 2 arrays of 3 ints), whereas *arr
is of type int[3]
(array of 3 ints). This difference is not expressed by your cout
statements, simply because operator<<
is not defined to express it.