数组指针的相关理解

1.数组指针

数组在内存占有一片连续的储存空间,这个连续空间的首地址为数组的指针

2.一维数组指针

int a[4],*p;    定义整数型一维数组,及整数型指针

p=&a[0];     p=a;   将数组a[4]的首地址赋值给p 

a数组
a[0] 或  *p
a[1] 或 *(p+1)
a[2] 或*(p+2)
a[3] 或*(p+3)

a为a[4]的数组名,默认为a[4]的首地址,将a赋值为相同变量的指针p,指针p就是指针指向数组a的指针,即把a的功能给p使用

指针的更深刻的理解

a数组
3
5
7
9

a[0]=3,a[1]=5,a[2]=7,a[3]=9

a[0]的地址为200,a[1]的地址为201,a[2]的地址为202,a[3]的地址为203

指针p=200,*p(解引用p)=a[0]=3

*(p+1)是指将指针p的地址200加1

*p+1是指将a[0]的值3加1,即为4

3.二维数组指针

二维数组的结构以及在内存中的形式

书面上体现的二维数组:

                                       a[0][0]  a[0][1]  a[0][2]  a[0][3]

                                       a[1][0]  a[1][1]  a[1][2]  a[1][3]

                                       a[2][0]  a[2][1]  a[2][2]  a[2]3]

                                       a[3][0]  a[3][1]  a[3][2]  a[3][3]

内存中二维数组的存放形式

a[0][0]

a[0][1]

a[0][2] 

a[0][3]

200

201

202

203

a[1][0] 

a[1][1] 

a[1][2] 

a[1][3]

204

205

206

207

a[2][0]

a[2][1]

a[2][2] 

a[2][3]

208

209

210

211

a[3][0]

a[3][1] 

a[3][2]

a[3][3]

212

213

214

215

二维数组可理解为包含4个元素的一维数组:a[0]  a[1]  a[2]  a[3]  

int a[4][4],*p;

*p=&a;   或   p=a;

根据数组名默认为数组的地址,即可知:

从一维数组的角度:(行地址)

a表示第0行的首地址   与&a[0][0] 、                                                 

a+1表示第1行的首地址   与&a[1][0]

a+i 表示第i行的首地址   与&a[i][0]

从二维数组的角度:(元素地址)

a[0]+1:表示一维数组中第二个元素的地址,相当于&a[0][1]
a[0]+2:表示一维数组中第三个元素的地址,相当于&a[0][2]
a[1]+1:表示二维数组中第二个元素的地址,相当于&a[1][1]

相关例子

*(a[1]+1)     *(*(a+1)+1)表示a[1][1]的值

分析:a[1]为a[1][]的数组名,即为其首地址,指向a[1][0]

           a[1]+1指向a[1][1]

           对a[1]+1进解引用,即*(a[1]+1)  为a[1][1]的值

a为数组a的首地址,为行地址,即a[0][0]的值

a+1指向a[1][0],+1指的是行地址加1,实际上加的是数组a[0][i]的数量,即加i

*(a+1)为a[1][0]的值,又为a[1][]的首地址

*(a+1)+1就是直接地址加1,指向a[1][1]

再进行解引用,即*(*(a+1)+1)为a[1][1]的值

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值