c语言二维数组指针访问,C语言的二维数组的指针访问.pdf

二维数组的指针访问

—— 王炳华

指向二维数组的指针及用指针访问二维数组,是学习指针的最大难点。如

果真正弄懂了这个问题,就可以说你学会了使用指针。

一、二维数组的指针

指针就是地址,二维数组的指针就是二维数组在内存中的存储地址。相对于一维

数组的地址而言,二维数组的地址稍微复杂一点。

二维数组的地址与一维数组的地址的相同点在于:①、它们的每一个元素都有一

个存储地址(称为元素地址);②、它们都是将全部元素在内存中按顺序占用一段连

续的存储空间;即对于一维数组,下标为 1 的元素的存储单元紧接在下标为 0 的元素

的存储单元之后,下标为 2 的元素的存储单元紧接在下标为 1 的元素的存储单元之

后……直到最后一个元素。对于二维数组,下标为 0 的行的各个元素按顺序存储完之

后,下标为 1 的行的元素紧接其后按顺序存储……直到最后一行的最后一个元素。

二维数组的地址与一维数组的地址的不同点是:它除了有元素地址外,还有标识

各行起始位置的行首地址(称为行的首地址)。

行的首地址 和 行的首元素的地址 具有相同的地址值,但是它们是两种不同的地

址:若有定义 int a[5][5] ; 则 a[0][0] 是 a 数组首行首列元素(代表该元素的值)。而

&a[0][0] 是 首行首元素的地址 。&&a[0][0] 则是 首行的首地址 。从这个意义上讲,可以

说 行的首地址是一种二重地址 。

二、 行的首地址、行的首元素地址和行的首列元素的值的关系

可以把某行的首地址、某行首列元素的地址、某行首列元素 (代表它的值 ) ,看成

是由高到低的三个层次。

某行首列元素作一次 & 运算得到该行首列元素的地址,某行首列元素的地址再作

一次 & 运算得到该行的首地址。

从这个意义上讲,可以说 元素的地址是一重地址,而行的首地址是二重地址 。

某行的首地址 作一次 * 或 [ ] 运算得到该 行的首元素的地址 ,某 行的首元素的地址

作一次 * 或 [ ] 运算得到该 行的首元素的值 。

三、 运算符 * 、&、[ ] 之间的关系

1. [ ] 运算符

[ ] 是下标运算符,只适用于数组和指向数组的指针变量。其优先级与( )同级,

高于 * 和 & 。结合方向是左结合性(自左至右)。

2 . 三者的关系

* 与 & 互为逆运算

* 与 [ ] 等效

[ ] 与 & 互为逆运算

3 . 作用

前面已经提到:可以把某行的首地址、某行首列元素的地址、某行首列元素 (代

表它的值 ) ,看成是由高到低的三个层次。

* 和 [ ] 都是将运算对象从高层向低 层转化。

& 是将运算对象从低层向高层转化。

如:行的首地址作一次 * 或 [ ] 运算得到该行的首元素的地址。

元素的地址作一次 * 或 [ ] 运算得到该元素的值。

而元素(代表它的值)作一次 & 运算得到该元素的地址。

某行的首元素的地址作一次 & 运算得到该行的首地址。 一

四、 数组名是地址常量

若有定义 int b[5] ;一维数组名 b 是什么?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值