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

1.深入了解二维数组

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

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

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]。因此,在进行类型转换或进行指针运算时,需要确保类型匹配

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

 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.多维数组的物理存储

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

 

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小白Erike.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值