数组的使用的几个注意

我们有时会遇到*a或者*(&a)之类的数组使用,a为数组名。那么今天就来简单介绍一下这些:

比如说我们定义一维数组 int a[100];

我们都知道一维指针名 a 保存的是数组首元素的地址,那么是否我们对数组进行遍历就可以像指针一样 a++ 来遍历呢?

答案是不能,因为上面数组首字母的解释并不完整,完整的说法是一维数组名是一个指针常量,它保存数组首元素的地址。

而我们知道,常量是保存在全局数据区中or段(即only red) 只读,并不能进行其他操作。所以不能像指针一样对a++,如果我们想遍历可以把这个地址给一个指针p,让p++。

还有以下几个点需要注意:

&a:    对一维数组名取地址 == 数组的地址;

*(&a):   对一维数组的地址取值  == 数组首元素的地址;

这两个公式可以帮助我们推广到二维数组,三维数组:

例如有二维数组 int b[100][100];

&a   :   对二维数组名取地址  == 二维数组的地址;

*(&a);  对二维数组的地址取值  == 二维数组中首个一维数组的地址;

对多维数组也是以此类推;

怎么去理解一个复杂定义的含义:

例如: *(*(a+i)+j);

让我们一步步去看:

1. a+i                       : 第 i + 1 个一维数组的地址(因为数组下标从0开始,所以是 i+1个)

2.*(a+i)                    : 第 i + 1 个一维数组的首元素的地址;

3.*(a+i)+j                 : 第 i + 1 个一维数组的第 j + 1 个元素的地址;

4.*(*(a+i)+j)         : 第 I + 1 个一维数组的第 j + 1个元素的地址存放的值(即 a[I][j] 的值)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值