Why *(arr+1) brings the same value as arr+1 in multi-dimensional arrays?

O haver a doubt about multi-dimensional arrays and pointers notation, as bellow.

arr[2][4] = {{1,2,3,4}, {5,6,7,8}};
printf("%d\n", (arr+1));
printf("%d\n", *(arr+1));

Why in the both printf(), the result printed in the screen is the same? Both bring the address of the second array inside of the arr.
The first one I understand because arr is a memory address and so, adding 1 to it adds (the size of the inner array * size of integer).
But the second one I am confused because if I put * before arr+1 it shoudn’t bring the value inside the address of arr+1 ?

>Solution :

(arr) points to the first memory address of the 2 * 4 array, i.e., arr[0][0].
(arr+1) points to the 2nd 1-D array comprising arr, i.e., it points to the array arr[1].

Now, *(arr+1) is basically the address of the first element of the 2nd 1-D array comprising arr, i.e., it points to the element arr[1][0].

If you know pointers well, arr[1] is the same address as arr[1][0].

You can confirm that by checking **(arr+1), which will output 5 in your case.

Leave a Reply