1 数组
定义:具有一片连续存储空间且数据类型相同的变量的集合。
其中每个变量称为数组的元素
1.1数组的一般形式
<存储类型> 数据类型 <数组名>[元素个数]
存储类型:
一般默认为自动存储;
数据类型:根据要存储的数据来确定
数组名:
1、命名:与标识符相同的命名规则;
2、数组名实质上是数组空间的首地址;
3、数组名是一个地址常量;
例如 int arr[10] = {};
arr -->首地址
arr + 1 -->表示第二个元素的地址
arr++
1.2 数组的引用
数组只能逐个引用
数组名[下标]
下标:从0开始
int arr[5] --> arr[0] arr[1] arr[2] arr[3] arr[4]
数组的赋值:
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 200;
1.3 数组的初始化
1.完全初始化:
int arr[5] = {1, 2, 3, 4, 5};
2.部分初始化
int arr[5] = {1, 2, 3};
int arr[5] = {0};
3.不给维数(下标)的初始化
int arr[] = {1, 2, 3, 4, 5};
1.4 数组的大小
数组的大小: sizeof(数组名);
单个元素所占字节数: sizeof(arr[0]) == sizeof(数据类型)
数组的大小 = 单个元素所占字节数 * 元素个数;
元素个数 = 数组所占字节数 / 单个元素所占字节数
7.3 冒泡排序
实质: 把最大值往后面放
排序的趟数: n-1趟
每趟比较的次数: n-1-i次
(在比较的时候前一个数比后一个大,就和后一个交换)
7.4 选择排序
实质:
第一趟:假设第一个数为最小值,并记录下标;
让第一个数和后面的所有数进行比较,遇到小的就记录下标,
直到遍历完找到最小值的下标;判断最小值的下标是否为第一个数的下
标;
如果不是那么第一个数就不是最小值,就让第一个数和最小值交换;
这样第一趟比较的结果就是将最小值放在了第一个位置;
第二趟 就假设第二个数为最小值,再和后面所有数比较,找到最小值下
标,
如果找到就继续交换。没找到就进行第三趟直到n-1趟结束;
eg:
int arr[5] = {0};
arr++;
eg2:
int size = 5;
int arr[size] = {0};
#define SIZE 5
int arr[SIZE];
eg:
int arr[5] = {0};
arr[5] = 100;
2 字符一维数组及字符串
2.1 字符串
字符串由多个字符组成,结尾自带'\0';
2.2 字符一维数组
一般形式:
存储类型 char 数组名[常量表达式];
eg:
char buf[32]:
表示一个可以存储32个字符的数组;
2.3 字符数组的初始化
一、逐个字符赋值:
1)完全初始化:
char buf[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
补充:
%s 输出遇 '\0'结束
%s 输入 遇到空格或者回车结束
2) 部分初始化
char buf[6] = {'h', 'o', 'w'};
会逐个赋值,没有被赋值到的元素补上'\0';
3) 不给下标的初始化
char buf[] = {'h', 'e', 'l', 'l', 'o', '\0'};
二、字符串直接赋值
char buf[6] = {"hello"};
char buf[6] = "hello";
char buf[] = "hello";