In the tutorial video about pointers (
The following facts about that code were given:
- Printing B (or &B[0]) would return 400 (the address of the first sub-array)
- Printing *B (or B[0] or &B[0][0]) would return 400 (the address of the first element in the first sub-array)
I struggle a bit with an understanding of that. How can B
and *B
have the same value? We can clearly see in the illustration that under address 400 there is a value 2. If B
= 400, then *B
= 2!
My understanding is that the value of B
would be the address of the first element of the outer array in the memory. Then, the *B
would return the address of the first sub-array in the memory.
According to the illustration, B
(not shown) has a value 400. Then, under 400, there is the first value of the first sub-array. Where are the addresses of the sub-arrays stored?
CodePudding user response:
B
and *B
do not have the same value, they have different types, namely int[2][3]
and int[3]
, but they have the same address in memory, ie: 400
as shown.
Think of B
as a building and B[0]
as the ground floor. They do not have the same value (in $) but they have the same address (and zip code).
This comparison works for passing B
or B[0]
to a function (delivery company): you are not passing the actual building, but merely its street address and the type name.