一、数组
1.数组
1.1 数组
一组相同类型元素的集合
1.2 数组的创建
数组类型 数组名[ ];
示例: int arr[10];
为支持变长数组, C99之后,数组的大小可以是变量
变长数组:
数组的长度(大小)通过变量指定
1.3 数组的初始化
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
不完全初始化:
int arr[5] = {1,2,3};//其余未初始化的部分自动补0
int arr[ ] = {1,2,3,4,5};
2. 一维数组
2.1 一维数组的创建
int arr[10];
2.2 一维数组的使用
数组的下标从0开始
下标引用操作符:[ ]
下标范围:0~n-1,或:
求数组大小:int sz = sizeof(arr) / sizeof(arr[0]);
sizeof(arr):总数组大小 //单位是字节
sizeof(arr[0]):第一个数组大小 //单位是字节
一维数组在内存中是连续存放的
3. 二维数组
3.1 二维数组的创建
int arr[3][4]; //3行4列
3.2 二维数组的初始化
int arr[3][4] = {1,2,3,4,1,2,3,4,1,2,3,4 };
int arr[3][4] = { {1,2,3,4},{1,2,3,4},{1,2,3,4} };
不完全初始化:
int arr[ ][4] = { {1,2},{3,4} }; //只能省略行,不能省略列
3.3 二维数组的使用
int main()
{
//定义二维数组,接收数据
//int arr[3][4] = { 1,2,3,4,1,2,3,4,1,2,3,4};
int arr1[3][4] = { {1,2,3,4},{1,2,3,4},{1,2,3,4} };
//输出数据
int i = 0;
for (i = 0; i < 3; i++) //行
{
int j = 0;
for (j = 0; j < 4; j++) //列
{
printf("%d ", arr1[i][j]);
}
printf("\n");
}
return 0;
}
数组传参,直接给数组名就行:
示例:bubble_sort(arr1);
将10,9,8,...1冒泡排序(按升序排序):
//定义函数
//数组传参有2种写法:1.数组;2.指针 //形参是数组的形式
void bubble_sort(int arr1[], int sz) //数组传参,数组接收,[]不可省略; //接收参数
//arr本质是指针变量,不是数组 //地址应该用指针接收
{
//冒泡趟数,与元素个数相关
//int sz = sizeof(arr1) / sizeof(arr1[0]); //函数內部不能求sz,函数外部求sz,
// 以参数形式传过来,形参部分接收
int i = 0; //趟数
for (i = 0; i < sz - 1; i++)
{
//一趟
int j = 0; //
for (j = 0; j < sz - 1 - i; j++)
{
if (arr1[j] > arr1[j + 1]) //升序排序 // 相邻元素进行比较
{
//交换
int temp = arr1[j];
arr1[j] = arr1[j + 1];
arr1[j + 1] = temp;
}
}
}
}
int main()
{
//创建数组,接收数据
int arr1[ ] = { 10,9,8,7,6,5,4,3,2,1 };
//冒泡排序算法
//核心思想:两个相邻元素进行比较
//一趟冒泡排序确定一个元素出现在该出现的位置
int sz = sizeof(arr1) / sizeof(arr1[0]);
bubble_sort(arr1, sz); //传参
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
3.4 数组名是什么
本质是首元素地址
二维数组的数组名:
表示第一行的地址,不是[0]]0]的地址
2个例外:
1. sizeof(数组名)
表示整个数组,计算整个数组的大小,单位是字节
2. &数组名
表示整个数组,取出整个数组的地址
二、利用数组
1.三子棋
三个文件
1. test.c 测试逻辑
2. game.c 代码实现
3. game.h 代码声明(函数声明、符号定义)