数组是一组相同类型元素的集合
数组的创建:
type_t arr_name [const_n];
//type是指数组的元素类型
//const_n是一个常量表达式,来指定数组的大小
数组的初始化在创建数组的同时给数组的内容一些合理初始值。
不完全初始化时,剩下的元素默认初始化为0
二维数组初始化的时候只能省略行数,不能省略列数
一维数组和二维数组在内存中都是连续存储的(二维数组一行内部连续,跨行也是连续的)
//冒泡排序
思想:两两相邻的元素进行比较,并且可能的话需要交换。
void bubble_sort(int arr[],int sz)//形参arr本质是指针
{
int i = 0;
for (i = 0; i < sz - 1; i++)//n个元素需要n-1躺冒泡排序
{
int flag = 1;//假设这一趟要排序的数据已经有序
int j = 0;
for (j = 0; j < sz - 1 - i; j++)//每趟比较的对数为sz-1-i
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;//本趟排序数据其实不完全有序
}
}
if (flag == 1)//经历完上一趟冒泡排序后,没有元素进行交换,证明已经有序
{
break;
}
}
}
int main()
{
int i = 0;
int arr[] = { 9,8,7,6,5,4,3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
//arr是数组,对数组arr进行传参,实际上传递过去的是数组arr首元素的地址&arr[0]
bubble_sort(arr,sz);//冒泡排序函数
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
arr是数组,对数组arr进行传参,实际上传递过去的是数组arr首元素的地址&arr[0]
数组名是数组【首元素地址】
两个例外:
1.sizeof(数组名)——数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节
2.&数组名——数组名表示整个数组,&数组名取出的是整个数组的地址
(数组的地址从值上面看和首元素地址一样,但意义不一样)
小游戏笔记参考链接:
三子棋游戏设计及代码实现_西西西西西西西西西的博客-CSDN博客
扫雷游戏设计及代码实现_西西西西西西西西西的博客-CSDN博客_扫雷游戏的设计与实现
char str[] = "hello bit";
//[hello bit\0]
printf("%d %d\n", sizeof(str), strlen(str));
//10 9
//strlen - 函数-求字符串长度的,找\0之前出现的字符个数
//sizeof - 操作符-计算变量/类型所占内存大小,单位是字节
char acX[] = "abcdefg";//a b c d e f g \0
char acY[] = {'a','b','c','d','e','f','g' };
//A.数组acX和数组acY等价 no
//B.数组acX和数组acY的长度相同 no
//C.数组acX的长度大于数组acY的长度 yes
//D.数组acX的长度小于数组acY的长度 no
int a[2][] = { {0,1,2},{3,4,5} };//no 列不能省略
int a[][3] = { {0,1,2},{3,4,5} };//yes
int a[2][4] = { {0,1,2},{3,4},{5} };//no 行超了
int a[][3] = { {0,,2},{},{3,4,5} };//no 没指定元素
//实现函数init() 初始化数组为全0
//实现print() 打印数组的每个元素
//实现reverse() 函数完成数组元素的逆置
void init(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
arr[i] = 0;
}
}
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void reverse(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left