【飞郁2022新课程】16 - 数组和字符串
前面讲到了数据类型讲到过字符数组
有的同学对 数组 还不太理解
那么今天我们讲解的是 数组 和 字符串以及一些编码
好了 开始我们的讲解
一、数组
首先我们讲解数组 那么什么是数组呢?
我们把数组 这2个字拆开理解
1.“数”:数据
2.“组”:编组 编制成一个组 一个队伍
3.合起来就是:把一些相同类型的数据编制到一个组里 方便管理
写法:
数据类型 变量名[数组成员数大小];
数据类型 变量名[数组成员数大小]={0};//初始化版本
|
|
1.1 数组的初始化
|
|
1.1.1 注意:
int iArray2[10]={0};//初始化
这里虽然只有一个0,但是他的作用就是把10个int类型的数组全部清空为0(我们一般把清空默认为0,也可以为其他值).
调试看下变化情况
经过“{0}”初始化后, 我们观察内存
1.2. 数组下标访问数组成员 和 赋值数组成员
|
|
1.3 访问下标最大范围 从0开始到最大成员减1,杜绝访问下标冲突,引起的访问冲突异常
|
|
其实上面我们讲到的是1维数组 那么有二维数组 吗?那么三维呢? 多维呢?
肯定是有的 基本写法是 每多一个维度 就要多加一个[数量] 这里我们稍微的知道有这些东西就行了
不便多讲,以后会逐步加深难度
int iArray[10][10]={0};//相当于10行10列
二、注意事项
1.从索引0开始访问 访问全部数据.
2.要初始化 避免一些乱码.
3.防止数据下标越界 引起访问冲突.
4.数组成员的地址是连续的 线性关系.
5.数组成员的初始化 看内存窗口中比较初始化前后数据变化 结合上面的图讲解起内存地址是连续的 线性关系.
6.数组变量名就是一个地址.
7.定义数组大小的时候必须是一个常量,不能是变量,也就是说在我们编译的时候必须明确指定数组的大小.
三、字符串
在讲到数据类型的时候我们已经讲到过了字符串,这里我们再简单的看看
字符串顾名思义就是把多个字符“串”在一起就成了字符串
其实也很好理解 数组也就是把多个数据紧紧的排列在一起
同时在C语言中定义字符串是以\0为结束标志,也就是说当读内存的时候一个字节一个字节的读知道遇到\0为止
3.1 例如
char cc[5]={'H','e','a','r','t','\0'};//注意要用单引号来表示字符类型哦
我们这里打印下看看
|
|
四、字符串编码简介
讲了字符串 我们这里就要简单的说下字符串编码问题
现在主流的编码有
ascii
unicode
utf-8
big5
他们都是按照某种规范去编制字符的
有的是 一个字符 一个字节表示 有的是2个 甚至是3个 多个的情况都有
这里简单的讲下
4.1 ASCII
char c[2]={'a','b'};//查看ascii表 一个字节来表示
观察内存
我们可以观察到61,62 都挨着一起,我们的字符“a”就是用0x61来表示的,这是遵循了ASCII表
4.2. UNICODE
我们再来看看unicode编码的形式
wchar wc[2]={'a','b'};//我们看内存 是2个字节表示的
继续观察内存
发现每一个字符占2个字节,这样编码是为了扩展更多的字符,因为ASCII每一个字符只占一个字节,我们知道一个字节最大值的表示范围在0到255,也就是最多只能表示256个字符,但是unicode就不一样了 ,它每一个字符占2个字节,也就是说2个字节最大表示范围在0到65535,一共可以存65536个字符.
4.3 其他编码
utf-8 和 big5 由于代码有些超纲 这里不便多讲 后面也会给同学们细细道来 不要着急
其实他们的原理都差不多
后面bird老师给带领大家对编码有进一步的认识