以下是哪些注释?

问题描述 投票:-6回答:1

对于声明为as-int的整数数组arr [4] [3] [2]

&arr 
arr
arr[0]
&arr
arr[0][0]
&arr[0][0]
arr[0][0][0]
&arr[0][0][0]

我的分析:

  • arr: - 指向三维数组的基地址
  • &arr: - 和arr一样,数组名称不会分解
  • arr[0]: - 指向3维数组的第一个元素的指针,该数组是指向2d数组的基址的指针
  • arr[0][0]:指向第一个3D数组的第一个2D数组的第一个单元格的第一个元素的指针。

我在考虑正确的线路吗?其中哪些是指向同一件事?

c arrays multidimensional-array
1个回答
1
投票

int arr[4][3][2]意味着arr3D阵列,包括four 2D阵列,每个2D阵列有three 1D阵列和每个1D arraytwo-two元素。

让我们有一个arr的图形表示:假设arr基地址是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

如果你分析上面的数字,你会发现arrarr[0]arr[0][0]&arr[0][0][0]都是same,所有都持有arr基地址是0x100

请注意,arr[0][0][0]value但是&arr[0][0][0]是第一个元素的address,所以两者都是different

arr&arrsame因为arr名称本身的地址所以通过推杆并没有任何区别。

arr[0][0]&arr[0][0]也是一样的,因为arr[0][0]是一维数组,即single pointer指向两个元素,称为arr[0][0][0]arr[0][0][1]。如

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
© www.soinside.com 2019 - 2024. All rights reserved.