1数组
1.1概念
一组数据的类型相同的元素集合
(1)数据类型相同
(2)地址连续
1.2定义
存储类型 数据类型 数组名[元素个位数];
存储类型:存储类型有:auto 、static、extern、register
数据类型:数据类型指数组中每个元素的数据类型。去掉变量名是数组的数据类型。
(数据类型大小不一样,数据类型不一样)
//用:
sizeof(int [n]);
sizeif(变量名);
//可以求出数组的数据类型
数组名作用:
(1)数组名代表数组首元素的地址
(2)数组名代表整个数组
元素个数:
必须是一个确定的数(常量)
int n = 5;
int arr[n]
n的值不能更改,因为定义数据时给数据分配了内存空间,修改元素个数会产生越界。
1.3数组的初始化
1.3.1 局部数据不初始化
对于普通局部数组,如果定义时不初始化,数组的元素值不确定
1.3.2 static数组不初始化
对于static修饰的数据,如果定义时不初始化数据,数组的元素的值全部为0
1.3.3 全局数组不初始化
对于全局数组不初始化,如果定义时不初始化,数组的元素的值全部为0
1.3.4 部分初始化
对于数据部分初始化,未初始化的元素值为0
部分初始化有以下几种方法:
a[10] = {12, 15, 18, 8,} //初始化了0-3四个元素,后面的元素值默认为0
a[10] = {[2] = 15, [5] = 8} //初始化2和5元素,未初始化的元素默认为0,初始化时顺序改变也不会产生影响
a[] = {[0] = 1,[5] = 15, [19] = 4},如果没有给定数组长度,会默认数据长度是20,即元素下表最大为19
1.3.5 全部初始化
进行全部初始化时元素的长度可以省略。可以分别对每个元素进行赋值
1.3.6 数组全部初始化为0
a[10] = {0};
1.4数组的访问
数组名[下标] //可以访问数组元素的值,下标必须从0开始
1.5输入输出
数组输入输出时常用for循环
1.6冒泡排序
思想:从左至右两两依次比较,如果前一个数比后一个数大的话就交换位置,否则,不变
2、字符数组
字符数组的本质是字符串(以‘\0’作为结束符)
存储类型 数据类型 数组名[元素个数];
数组个数要给‘\0’留一个元素位置
char arr[6] = {“hello”}; //有个5个字符和一个’\0’
2.1字符数组的输入输出
字符串的输出格式为%s
用函数puts(数组名);
功能:将数组中的字符串打印出来,会自动添加换行符
注意:遇到’\0’结束
2.2字符串的输入
gets(数组名);
功能:将键盘输入的字符串保存到数组中,会自动在末尾添加’\0’
注意gets函数不会进行越界检查,输入的时候注意不要越界
注意:
1、scanf是以空格、回车、Tab键作为结束符,而gets是以回车作为结束符
缓冲区:
gets输入完成会自动清空缓冲区
scanf输入完成后,缓冲区会遗留空格、回车、Tab键
gets输入之前,先会查看缓冲区是否有内容,有的话直接拿过来使用
scanf是标准输入函数,每一次输入都需要从键盘获取
2、prinf和puts的区别
puts会自动 添加换行符,printf不会添加换行符