-
-
[分享]C语言基础三-数组
-
2021-5-11 17:26 3604
-
什么是数组
- 一组相同类型的数据连续存储在一段内存中,共用一个名字。
- 数组中的每个变量使用下标区分,下标从0开始,称为数组的元素。
- 数组中每个元素的类型相同,占用的内存空间大小相同。
- 存放数组的内存是连续的,数组名就是这段内存的首地址。
- 数组支持随机访问,链表不能随机访问。
- 数组做参数传递给函数,在函数内部退化为指针。
一维数组
在C\C++中,声明数组不用考虑申请多大的内存空间,只需给定数组大小,编译器自动申请内存空间使用。数组大小的计算公式:数组元素个数*元素数据类型大小=数组大小。sizeof关键字是求内存大小的关键字。
1 2 3 4 5 6 7 8 9 10 | / / 一维数组的声明 / / 声明一个名字为Ary的数组,有 3 个元素 int Ary[ 3 ]; / / 一维数组的初始化 / / 全部初始化,数组的每个元素全部初始化为 0 int AryA[ 3 ] = { 0 }; / / 大括号初始化,数组中的元素分别初始化为 1 , 2 , 3 int AryB[ 3 ] = { 1 , 2 , 3 }; / / 不确定个数的初始化,数组中的元素分别初始化为 1 , 2 , 3 int AryC[] = { 1 , 2 , 3 }; |
需要注意的是,声明的是个数,也就是说数组有3个元素,但是访问是从下标0开始的。C语言中,数组的声明不支持动态声明,不能把元素个数保存到变量中,让编译器跟随变量申请内存空间。数组只能在初始化的时候直接赋值,初始化结束后,就不能直接赋值了,必须拷贝或单个元素赋值。
字符数组
- 单个元素初始化的字符数组最后一个字符不是'\0',数组不是一个字符串,sizeof()就是数组的长度。
- 字符串初始化的字符数组最后一个字符是'\0',数组也是一个字符串,sizeof()既是数组的长度,也是字符串的长度,包括最后一个'\0'。
- strlen()函数用来计算字符串中非'\0'字符的个数,需要传入字符串的首地址,传入非字符串字符数组是非法的。
二维数组
1 2 3 | / / 二维数组的定义 / / 定义一个名字为Ary的数组,有 2 个元素,元素是一维数组 int Ary[ 2 ][ 2 ] = {{ 1 , 2 },{ 2 , 3 }}; |
- C语言中,二维数组按行排列。
- 二维数组是概念上的二维,在内存中依然是连续的。
- 如果数组较小,一个内存页能够存下,访问数组不会发生缺页中断,先行后列和先列后行差别不大。
- 如果数组较大,一个内存页无法存下,由于数组是按行存放的,同一列的数据就可能存放在不同的页中,先列后行可能引起缺页中断,效率变低。
数组溢处
- 访问的内存地址不存在,程序崩溃
- 访问的内存地址存在,是不属于自己的数据或者垃圾值
- 修改内存中的数据,可能会破坏其他正常的数据
github:https://github.com/0I00II000I00I0I0
bilibili:https://space.bilibili.com/284022506
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
他的文章
[分享]C++基础十七-异常机制
7789
[分享]C++基础十六-模板
8144
[分享]C++基础十五-运算符重载
8190
[分享]C++基础十四-抽象类
7905
[分享]C++基础十三-多态
7633
看原图