指针的问题5 指针访问数组的方式

指针和数组有很多种配合的方式,当然每一种方式的访问方法是不一样的。

—————————————————————————————————————————————————————————

1、

int a[4]={1,2,3,4};

int (*p)[4]=a;//这里的指针是指向的数组的首地址;

---->访问方式:(*p)[1]   与a[1]等效

—————————————————————————————————————————————————————————

2、

int a[4]={1,2,3,4};

int *p = a;

---->访问方式:*(p+1)   与a[1]等效

—————————————————————————————————————————————————————————

3、

int a[4]={1,2,3,4};

int *p = &a;

---->访问方式:*((*p)+1)    与a[1]

       访问第一个元素时:*((*p)+1)= **p = a[0]

—————————————————————————————————————————————————————————

4、

int a[3][3]={

{1,2,3},

{4,5,6}

};

int (*p)[3]=a;//这里的指针指向的是二维数组的首地址(一次访问三个)

---->访问方式: p[1][1]=a[1][1]=*(*(p+1)[1])=*(p[1]+1)=5

—————————————————————————————————————————————————————————

5、

int a[3][3]={

{1,2,3},

{4,5,6}

};

int (*p)[3][3]=a//或等于&a都一样

---->访问方式:(*p)[1][1]=a[1][1]=5

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————

那么以上的访问方式有什么规律呢?

规律:

首先要有类型的概念。也就是指针到底指向的是什么拿第三种情况来讲吧:

p是一个指针,根据右左法则:从p开始向右看遇到括号返回往左会遇到*,说明这是一个指针;然后括号便可以去掉继续向右看遇到[4]。这里解释了数组类型的内存空间大小为4个字节的数组,再向左看遇到int解释了数据,即是说存放的数据为int型的。这样这个指针就明显了,是一个指向整型内存大小为四个字节的数组,由于使用&a初始化数组。前一篇日记以及说过了,&a表示的是整个数组,也就是说这个指针指向的是整个数组。(*p)+1只是一个地址的增加,所以要加*进行地址转换。这就是*((*p)+1)=a[1]的由来。其他的组合方式均可以用这种方法进行分析,这里就不在累述了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值