二维数组与数组指针的使用

二维数组的顾名思义有两个维度, 在这里, 我们可以把它看做是一个矩阵, 方便理解, 一维度代表行, 一维度代表列。

首先从二维数组的定义说起,二维数组的定义及初始化有很多种形式。

1.分行初始化 int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

2.顺序初始化 int a[3][3] = {1,2,3,4,5,6,7,8,9};

3.省略航长度 int a[][3]  = {1,2,3,4,5,6,7,8,9}  编译器以3为1行,自动划分行, 省略行长必须以顺序初始化的格式进行初始化,不能以{}形式进行初始化。

4.分行部分初始化 int a[3][3] = {{1, 2}, {3}, {4, 5, 6}};  可以不全部初始化, 不足的部分, 编译器置零。


上述定义中, 第一个参数代表的是行数(实际上是第几个数组), 第二个参数代表列数(实际上是这个数组有几个变量)。


二维数组的使用问题:

1.数组名代表第一个数组的首地址, 在sizeof和 &a时, a代表整个二维数组。其余情况代表第一个数组的首地址。 a + 1 代表第二个数组的首地址。

2.a[0], 在sizeof 和 &的时候, 代表第一个数组整个数组 ,计算大小和运算的时候都是以第一个数组整个数组的大小进行运算。在其余情况下, 代表第一个数组第一个元素的地址, +1 就指向了第一个数组第二个元素, 也就是 a[0][1]这个元素的地址。(想要使用数组元素, 必须在a[n]这个层面进行操作)

3.虽然a的地址不变, 但是不同的操作还是代表了不同的含义, a代表了第几个数组, 对a进行操作, 就是在不同数组上进行切换。使用具体某个元素,是某个数组的成员, 所以需要告诉编译器,这个成员在哪个数组,确定了哪个数组, 然后确定某个元素。 *(a + 1)相当于选定了第二个数组, 这时*(a+1)代表的是第二个数组的第一个元素的地址, (*(a+1) + 1)这个表达式仍然是地址, 指向的是第二个数组第二个元素的地址, 再进行* 操作就是数据了。




数组指针的使用:

数组指针实质是一个指向数组的指针, 而针织数组实质上是一个成员是指针的数组。


数组指针指向的是数组, 以上面定义为例, 数组指针使用如下, int (*p)[3] = a; p就指向了a这个数组,[3]代表了指向数组的成员的个数, 也就是说对p进行+ -等操作, 都是以3个成员的大小进行的, 在某个程度上, 它与数组名一样, 使用具体元素, 也需要进行* 或者[]操作, 选定具体的数组然后进行操作。 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值