11.0.0 数组
11.1.0 格式控制符总结
占位符也被称作格式控制符。
11.1.1 格式控制符的作用
不同类型的数据在变量中存储的形式是不一样的。
所以在读取变量中的数据的时候,类型不同读取的方式也不同。
为了保证可以正确读取出存储在变量中的数据,我们应该使用正确的格式控制符。
例如%c从给定变量的地址开始只读取1个字节,然后将这个字节的整数读出来,以其为ASCII码还原为字符。所以如果用%c去读取一个很大的数,超过了1个字节的整数,只会读取这个很大的数的二进制形式的1个字节的数据,就会产生出错误或混乱的结果。
又如%d是从给定的变量的地址开始读取4个字节的数据。如果超过了4个字节的数据,(例如采用long long定义的变量)也会产生不完全读取的情况,导致最后的数据是混乱或错误的。
所以变量中的数据是如何存储的,就应该如何读取,这样才能拿到正确的数据。
11.1.2 总结
int整型
%d 读取int整型的数据,以十进制的形式输出
%o 读取int整型的数据,以八进制的形式输出
%x 读取int整型的数据,以十六进制的形式输出
%hd 以short定义的数据
%ld 以long定义的数据
%lld 以long long定义的数据
%u unsigned int定义的数据
%hu unsigned short定义的数据
%lu unsigned long定义的数据
%llu unsigned long long定义的数据
实型
%f 读取float类型的数据
%lf 读取double类型的数据
字符型
%c 读取char类型的数据
地址
%p 读取内存地址
11.2.0 垃圾值的由来
我们声明一个局部变量,如果没有为其赋值的话,那么这个局部变量是有值的,这个值被称为垃圾值。
11.2.1 变量的回收
在大括号执行完毕之后,定义在这个大括号中的变量就会被系统回收。
那么是如何回收的呢?
声明变量的时候,系统为其从高地址向低地址分配指定字节数的连续空间。
所以在回收的时候,其实就是告诉系统变量占用的字节已不再使用,可以分配给别的变量了。但是原先变量所占用的字节的数据是不会被清空的。
当再声明一个变量的时候,这个新变量占用的空间有可能就是刚刚被回收的那个变量占用的空间。那么这个时候这个新变量中是有数据的,这个数据就是上次那个已被回收的变量遗留下来的数据,这个数据就被叫做垃圾值。
所以在声明局部变量的时候,最好同时为其赋值。
11.2.2 全局变量的情况
当将全部变量声明出来以后,系统会自动的将全局变量中的数据清零。所以全局变量似乎不会产生局部变量的垃圾值问题。
11.3.0 数组的基本使用
当我们想要将多个数据一次性存储到内存中去的时候,我们不得不同时分配相对应数量的变量来存储这么多数据。但是以现有的知识,操作这样的情况有一些难度和复杂性。如果能够有一种变量可以一个变量存储多个数据,并且能随时调用且不会产生混乱和错误,那就可以更加便利和简单。
而这种变量就叫做数组。
11.3.1 数组的作用和特点
数组的作用:存储多个数据,并且存储的多个数据之间能够和谐相处。与我们从前学习的普通变量最大的区别就是:普通变量只能存储1个数据,赋值的时候,新的数据会把旧的数据取代掉,而数组可以存储多个数据,存进去新的数据并不会取代旧的数据。
数组的特点:a. 可以存储多个数据;
b. 1个数组只能存储类型相同的多个数据,是我们在创建数组的时候指定的;
c. 数组中可以存储的数据的个数是固定的,也是我们在创建数组的时候指定的。
d. 存储在数组中的数据管理非常方便,拿到这个数组就拿到了存储在数组中的数据。
11.3.2 如何声明一个数组
在创建数组之前,需要先确定两点:
- 确定存储的这多个数据的类型;
- 这个数组最多可以存储多少个数据。
声明数组的语法:
存储的多个数据的类型 数组名称[这个数组最多可以存储多少个数据];
例如:
int arr[5];
这代表创建了一个数组,名字为arr,这个数组最多可以存储5个数据,每个数据类型都必须是int类型。
double、float、char类型都是类似的方法。
11.3.3 数组在内存中是如何创建的
举例:
int arr[3];
- 这个数组的名称是arr,不是arr[3];
- 数组也是一种变量;
- 这个数组的类型是int数组类型的,不是int类型。
在内存中如何创建数组呢?
- 先在内存中声明1个数组变量arr;
- 将这个数组平均的划分为3个等份;
- 每一个等份的类型都是int类型;
- 真正存储数据的是数组中的每一个等份空间。
11.3.4 几个专业术语
- 元素:数组中的每一个存储数据的空间叫做元素。
- 下标/索引:为了区分数组中的每一个元素,C语言系统为每一个元素编了一个号码,这个号码从0开始,依次递增,这个号码就叫做这个元素的下标/索引。
- 长度:指的是数组中元素的个数,也就是这个数组最多可以存储的数据的个数。
11.3.5 如何往数组中存储数据
数组中存储数据的是数组的元素,而不是整个数组,数组名代表整个数组,所以不能直接为数组赋值。
数组中真正存储数据的是元素,所以我们应该将值赋值给数组中的元素。
而数组中有多个元素,你必须要确定赋值给哪一个元素,通过元素的下标来确定。
语法:
数组名[元素的下标] = 数据;
例子:arr[1] = 100;
<