[Solved] What are the following notations pointing to?


int arr[4][3][2] means arr is 3D array, consists four 2D array, each 2D array having three 1D array and each 1D array having two-two elements.

Let’s Have a pictorial representation of arr : Assume arr base address is 0x100.

arr[0][0][0]                               arr[1][0][0]                          arr[2][0][0]                            arr[3][0][0]
 0x100      0x104         0x108   0x112     0x116    0x120      0x124      0x128  0x132    0x136       0x140      0x144   0x148       0x152    0x156          0x160     <--1D array elements
   |         |              |       |        |         |          |         |      |        |            |         |       |           |         |              |
   ----------                --------         ----------           ----------      ----------            -----------       ------------           ---------------
        |                       |                 |                     |              |                      |                 |                       |
        arr[0][0]               arr[0][1]       arr[1][0]            arr[1][1]       arr[2][0]              arr[2][1]         arr[3][0]               arr[3][1]
        0x100                   0x108           0x116                 0x124          0x132                   0x140             0x148                   0x156            <---1D array
        |                       |               |                       |              |                       |                |                       |
        ------------------------                -------------------------              -------------------------                ------------------------
                |                                      |                                      |                                         |
                arr[0]                               arr[1]                                 arr[2]                                    arr[3]                            <---2D array
                0x100                                0x116                                  0x132                                     0x148
                |                                      |                                      |                                         |
                -------------------------------------------------------------------------------------------------------------------------
                                                                        |
                                                                       arr                                                                                              <---3D array
                                                                      0x100

If you analyse above figure, you will come to know that arr,arr[0],arr[0][0] and &arr[0][0][0] all are same, all are holding arr base address that is 0x100.

Note that arr[0][0][0] is value but &arr[0][0][0] is address of first elements, so both are different.

arr and &arr also same because arr name itself address so by putting & doesn’t make any difference.

arr[0][0] and &arr[0][0] also same because arr[0][0] is one dimensional array i.e single pointer pointing to two elements called arr[0][0][0] and arr[0][0][1].
as

arr[0][0]               ==      & arr[0][0]
*( *(arr+0) + 0)        ==      & *( *(arr+0) + 0)
*( *(0x100 + 0x16) + 0) ==      & *( *(0x100 + 0x16) + 0)
*( *(0x100))            ==      & *( *(0x100))
*( 0x100)               ==      & *( 0x100)
0x100                   ==      & 0x100
0x100                   ==      0x100

solved What are the following notations pointing to?