首页
论坛
课程
招聘
[基础知识] [分享]C语言基础六-数组
2021-4-18 23:01 1256

[基础知识] [分享]C语言基础六-数组

2021-4-18 23:01
1256

什么是数组

  • 一组相同类型的变量连续存储在一段内存中,共用一个名字
  • 数组中的每个变量使用下标区分,下标从0开始,被称为数组的元素
  • 每个元素的类型相同,它们占用的内存空间是等长的
  • 存放数组的内存是连续的,数组名就是这段内存的首地址
  • 数组支持随机访问,链表不能随机访问

一维数组

在C\C++中,声明数组不用考虑在哪里申请多大的内存空间,只需要给定大小,编译器自动申请内存空间使用。数组大小的计算公式:数据类型大小*元素个数=数组大小。sizeof关键字是求大小的关键字。
一维数组的声明:数据类型 数组名【数组元素的个数】,例如:

1
int Ary[3];   //定义一个名字为Ary的数组,有3个元素

需要注意的是,声明的是个数,也就是说数组有3个元素,但是访问是从下标0开始的。在C语言中,数组的声明不支持动态声明,不能把元素个数保存到变量中,让编译器跟随变量申请内存空间。

数组的初始化

1
2
3
4
5
6
//全部初始化,数组的每个元素全部初始化为0
int AryA[3] = {0};
//大括号初始化,数组中的元素分别初始化为1,2,3
int AryB[3] = { 1, 2 ,3};
//不确定个数的初始化,但是又不动态申请空间,数组中的元素分别初始化为1,2,3
int AryC[] = { 1, 2, 3};

数组只能在初始化的时候直接赋值,初始化结束后,就不能直接赋值了,必须拷贝或单个元素赋值

字符数组

  • 单个元素初始化的字符数组最后一个字符不是'\0',数组不是一个字符串,sizeof就是数组的长度
  • 直接用字符串初始化的字符数组最后一个字符是'\0',数组也是一个字符串,sizeof包括最后一个'\0'
  • strlen()用来计算字符串中非'\0'字符个数,参数需要传入字符串,传入非字符串字符数组是非法的

二维数组

二维数组的定义:数据类型 数组名【常量表达式1】【常量表达式2】

1
2
int Ary[2][2] = {{1,2},{2,3}};
//定义一个名字为Ary的数组,有2个元素,元素是一维数组
  • C语言中,二维数组按行排列
  • 二维数组是概念上的二维,在内存上依然是连续编址的
  • 如果数组较小,能够在一个内存页放下,访问数组不会发生缺页中断,先行后列和先列后行差别不大
  • 如果数组较大,一个内存页无法放下,由于数组是按行存放的,同一列的数据就可能存放在不同的页中,先列后行访问可能引起缺页中断,效率变低

数组首地址注意事项

数组做参数传递给函数,在函数内部退化为指针

1
2
int AryA[3] = { 1, 2 ,3};
int AryB[2][2] = {{1,2},{2,3}};

什么是数组溢处:

  • 访问的内存地址不存在,程序崩溃
  • 访问的内存地址存在,是不属于自己的数据或者垃圾值
  • 修改内存地址的数据,破坏其他正常的数据

第五届安全开发者峰会(SDC 2021)议题征集正式开启!

最后于 2021-4-19 21:03 被流照君编辑 ,原因:
收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回