Day6
数组
1. 概念
一组数据类型相同的元素组合在一起
- 数据类型相同 2、地址连续
2. 定义
存储类型 数据类型 变量名;
int a;
存储类型 数据类型 数组名【元素的个数】;
int arr[5];
float brr[5];
定义了一个数组,数组名为arr,数组中有五个int类型元素;
数组名:arr
数据类型:数组元素的数据类型
数组的数据类型是什么?
数据类型:去掉变量名,就是数据类型
数组的数据类型: int [5];
int arr[5];//数据类型是 int [5];
int brr[6];//数据类型是 int [6];
int crr[5]; //数据类型是 int [5],int crr[5]的数据类型和int arr[5]的数据类型一样
int [5]和int [6]表示的数据类型是不一样的;
元素的个数:必须为一个确定的值
数组名:
代表数组首元素的地址(可以表示整个数组)
%p:打印地址
3. 初始化
3.1 部分初始化
Int arr[5] = {1,2,3};
部分初始化,未被初始化的部分,值为0
用此特性给数组清零
Int arr[5]={0};
3.2 全部初始化
全部进行初始化
Int arr[ ];//error
只有全部初始化的时候才可以这样去做!!!
Int arr[ ] = {1,2,3}; //可以,编译器自动计算数组元素的个数
如果不进行初始化:产生的结果
总结:
- 数组定义在函数体外,(相当于全局变量)不初始化,元素都为0
- 数组定义在函数体内,(相当于局部变量)不初始化,元素为随机值
- 数组定义在函数体内,(相当于用static修饰局部变量)用static修饰,不初始化,元素都为0;
4. 访问
案例:判断以下四个是否正确
1、int a[5];(a[0]----a[4])
a[4] = {1,2,3,4,5} ; //error 没有a[5]
2、int a[5];
a = {1,2,3,4,5}; //error数组名表示数组首元素的地址
3、int a[ ] = {0}; //对,没有意义 int a = 0;
4、int a[ ]; //error 编译器不知道要分配多大的内存空间
5. 冒泡排序
(c语言阶段唯一一个算法)
Int arr[5] = { 14, 85,99,2,30};------------> 2,14,30,85,99
思想:从左向右两两依次比较,如果前一个数大于后一个数,就交换位置;反之,不变。
作业:
- 不使用冒泡排序,输出最大值
2. 打印菱形
3. 打印9*9乘法表
定义:
字符数组的本质就是字符串;
存储类型 数据类型 数组名[元素的个数];
char str[10];
定义了一个名为str的字符数组,所占内存空间:sizeof(数据类型)*元素的个数=1*10=10
数据类型:元素的数据类型
数组的数据类型:char [10];
初始化:char str[10]={‘s’,’h’,’a’,’n’,’g’};
char sstr[6]={‘h’,’e’,’l’,’l’,’o’};//自己最多只能去初始化五个字符,因为要给’\0’留位置
Char atr[10]=”hello”;
用部分初始化的特性去给字符数组清零:char btr[10]={‘\0’};
1. 字符串的输出函数:
%s:输出字符串
puts(数组名);
功能:将数组的内容打印到终端,并自动添加换行
注意:遇到’\0’结束
2. 字符串的输入函数
gets(数组名)
功能:将键盘接受到的字符串存入数组,并会在末尾添‘\0’
注意:不会进行越界检查,输入的时候要注意不要越界