数组的应用

数组

1、数组认知:

a/静态分配空间   ————缺点:空间利用率差(1.不够用2、浪费空间)

b/所在内存空间特点:连续的(物理连续)【物理空间连续】---开销小——malloc分配的空间是否物理连续?(物理不连续但逻辑连续)malloc实现原理:链表链接所有的空闲的空间,组成最终分配的空间

2、如何使用数组:

a/定义数组:数组该定义多大?   无法解决数组大小问题 ——数组的缺点

注意事项:

c99- 可变长数组:可以用变量来定义数组的长度,不能在使用过程中已修改变量的值,来扩充数组的内存空间

柔性数组

c89定义数组时,必须要确定的长度---选择方式:通常用宏来表示数组的大小,可以提高代码的移植性————

b/数组的使用:

使用数组前要先清零——

面试题:数组名的作用

一维数组名:指针常量--不能修改元素的值(元素类型指针),保存的是数组首元素的地址

a:数组名。指针常量,保存数组首元素地址

&a:对数组名取地址,等于数组的地址;

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

整型变量的地址用整型指针变量保存

字符变量的地址用字符指针变量保存

数组的地址用数组指针变量保存

数组指针变量:变量,保存的是地址,地址是数组的地址

int (*pa)[3] :pa是一个变量,保存的是地址,该地址是数组的地址,该数组是一个整型数组,有三个元素;

二维数组的定义:不能省略行但可以省略列

二维数组名的作用

二维数组名:指针常量(一维数组指针),保存首个一维数组的地址

三位维组

int aaa[2][2][2] = {{1,2,3,4},{5,6,7,8}};

第一个下标:第几个个二维数组

第二个下标:第几个个二维数组第几行

第三个下标:第几个个二维数组第几行第几列

如何定义数组指针变量----右左法则  int(*pa)[2]

使用场景:函数传参

三维数组名的作用:首个二维数组的地址

 

指针数组 int *p[3];
  int main (int argc ,char *argv[]){}

使用注意事项

1、局部指针数组里元素都是野指针,需要分配空间

2、用完之后要释放并置空

传一维数组名,用元素的指针;因为一维数组的单位是元素
传二维数组名,用一维数组指针;因为二维数组单位是一维数组
传三维数组名,用二维数组指针;单位是二维数组,保存的是二维数组地址
传指针数组名,用指针的指针;

指针和数组的区别
空间分配、访问效率、安全性、函数形参

指针是动态分配的,数组是静态分配的,指针所指的空间不一定是连续的因为有可能是通过malloc分配的是动态分配,数组是静态分配的物理空间是连续的

访问效率 数组 > 指针 但指针更灵活,指针可以实现随机访问

安全性是数组 > 指针 指针容易造成野指针,造成内存泄露

函数传参 数组会退化成指针

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值