首页
论坛
课程
招聘
[基础知识] [分享]C语言基础三-数组
2021-5-11 17:26 928

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

2021-5-11 17:26
928

什么是数组

  • 一组相同类型的数据连续存储在一段内存中,共用一个名字。
  • 数组中的每个变量使用下标区分,下标从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


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

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回