以下是哪些注释?

时间:2017-12-25 11:33:03

标签: c arrays multidimensional-array

对于声明为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数组的第一个单元格的第一个元素。

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

1 个答案:

答案 0 :(得分:1)

int arr[4][3][2]表示arr3D数组,由four 2D数组组成,每个2D数组包含three 1D数组且每个1D array数组拥有two-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,所有人都持有{ {1}}基地址为arr

请注意,0x100arr[0][0][0],但value为第一个元素&arr[0][0][0],因此两者均为address

differentarr&arr,因为arr名称本身的地址是通过放置&amp;没有任何区别。

samearr[0][0]也相同,因为&arr[0][0]是一维数组,即arr[0][0]指向名为single pointerarr[0][0][0]的两个元素。 如

arr[0][0][1]