通过指针访问数组

指针与指针变量的区别

  • 指针;一个变量的地址
  • 指针变量;一种变量专门存放地址
  • 指针变量的值是**(指针)**地址

一维数组

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

学过C++的都知道一维数组的名字就是首地址;
所以可以如下表,如果int *p=a;

a==&a[0]p==&a[0]
a+1==&a[1]p+1=&a[1]

可以说a与p等效
通过指针访问一维数组

a==&a[0]a+1==&a[1]
*a=a[0]*(a+1)===a[1]

关于以下文章我也是学习以下链接;
点这里

二维数组(数组的数组)

指向元素

int a[3][4]={{1,2,34},{5,6,7,8},{9,10,11,12}};
int *p=&a[0][0];

第i行第j列实际上是第i*c+j个元素(其中c是列数)
但又不能像一维数组一样p==a;
i*c+j个元素地址偏移量4*(i*c+j)故,a[i][j]=*(p+i*c+j)
首地址+偏移量;

访问二维数组

a[0]==&a[0][0]a[0]+1==&a[0][1]
*a[0]==a[0][0]*(a[1]+2)==a[1][2]

指向每一行的指针

int a[3][4]={{1,2,34},{5,6,7,8},{9,10,11,12}};
int *p=a[0];

这里不让p==a;我们说二维数组是数组的数组;
在这里插入图片描述
此时p=a[0];相当于p=第0行;
如果要指向第1行int *p=a[1];
要输出a[i][j]=*(p+j)
需要提前指定p指向某一行,且此方法必须知道行数;
指向整个数组的指针

int a[3][4]={{1,2,34},{5,6,7,8},{9,10,11,12}};
int (*p)[4]=a;

首先要知道a;无论一维数组或者二维数组,数组名a==a[0]
可以把*p看作b,b[4]=a;则*p==a[0]; *(*p)==a[0][0];[4]是四个元素
a[i][j]=*(*(p+i)+j)

后面这些确实有点难理解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值