I know that in a bidimensional static array arr, arr is the same with arr[0], &arr[0], &arr[0][0], but I can't find why this also happens with *arr
Asked
Active
Viewed 50 times
2
-
See my answer here: https://stackoverflow.com/questions/33358758/issue-implementing-dynamic-array-of-structures/33358829#33358829 It has an extended explanation of how to access arrays vs pointers in all forms. – Craig Estey Dec 10 '18 at 22:25
-
`*arr` and `arr[0]` are defined as meaning the same thing – M.M Dec 10 '18 at 22:36
1 Answers
3
Lets take a look at a simple two "dimensional" array (array of arrays) and how it looks like in memory.
First the array:
int a[2][2];
And how it looks like in memory (with some pointers):
+---------+---------+---------+---------+ | a[0][0] | a[0][1] | a[1][0] | a[1][1] | +---------+---------+---------+---------+ ^ | &a | &a[0] | &a[0][0]
Looking at this it should be easy to understand why the pointers are the same.
To continue don't forget that all arrays can decay to a pointer to its first element. That is, for the array a
above, then a
is equal to &a[0]
. That means *a
is equal to *&a[0]
, which since the *
and &
operators cancel each other out, will be equal to a[0]
. And since a[0]
is an array it will decay to a pointer to its first element which is equal to &a[0][0]
. That is, *a
is equal to &a[0][0]
.

Some programmer dude
- 400,186
- 35
- 402
- 621