【带头学C++】----- 三、指针章 ---- 3.8二维数组与数组指针的关系(二,补充)

1.深入了解二维数组

    在上一节3.8中,对于二维数组的笔记中我觉的还缺少一些基础性建设,所以在此进行补充。

【带头学C++】----- 三、指针章 ---- 3.8二维数组与数组指针的关系(二,补充)_第1张图片

(引用千锋教育基础班笔记的一些记录)

arr[1]     =>   *(arr+1)                     第一行第0列的列地址

&arr[1]   =>  &*(arr+1) =>arr+1     第1行的行地址

*(arr+1)  =>  第0行第1列的列地址

arr[1]+2  =>  *(arr+1)+2 =>   第1行第2列的列地址    (参照第一个是第一行,就是第二行其实,数组里面是从0开始,前面还有给第0行,+2就是列地址加2,跳过一个字符的大小,之前有了解过的知道,)

**arr   ==  *(*(arr+0)+0)   ==   arr[0][0]

数组是从0开始的,二维就是从0行0列开始(也就是我们实际问题中的第一个,程序中通常对数组说的第0就是第1。)

2.二维数组和一位数组指针的关系

       在 C/C++ 中,二维数组可以视为一维数组的数组。也就是说,二维数组可以看作由多个一维数组组成的数据结构。因此,我们可以使用一个一维数组指针来表示二维数组。

       具体来说,假设有一个二维数组 int arr[m][n],其中 m 表示行数,n 表示列数,则可以定义一个对应的一维数组指针 int (*p)[n]

       通过指针的运算和解引用操作,我们可以使用一维数组指针来访问二维数组中的元素。例如,*(p+i) 表示第 i 行的一维数组指针,*(*(p+i)+j) 表示第 i 行第 j 列的元素。

       需要注意的是,二维数组和一维数组指针的类型不完全相同。二维数组的类型是 int [m][n],而一维数组指针的类型是 int (*)[n]。因此,在进行类型转换或进行指针运算时,需要确保类型匹配

     二维数组和一维数组指针之间的关系:二维数组是由一维数组组成的,而一维数组指针可以用来表示和操作二维数组。

【带头学C++】----- 三、指针章 ---- 3.8二维数组与数组指针的关系(二,补充)_第2张图片

 int arr[n];                  int *p;    

int arr[n][m];              int (*p)[m];

int arr[n][m][k];           int (*p)[m][k]
n维数组     和      n-1维的数组指针      等价

 3.多维数组的物理存储

      无论是一维数组还是多维数组,它们都以线性的方式进行存储,也就是在物理上是一维存储的。对于多维数组,它们在逻辑上可以被视为具有多个维度的数组

 【带头学C++】----- 三、指针章 ---- 3.8二维数组与数组指针的关系(二,补充)_第3张图片

用一维的方式去遍历二维的数组 

 【带头学C++】----- 三、指针章 ---- 3.8二维数组与数组指针的关系(二,补充)_第4张图片

 

你可能感兴趣的:(C++从基础到抗大旗,c++,开发语言,笔记,学习,算法,数据结构)