C语言从入门到精通——初阶4 数组

57 一维数组

创建和初始化

数组是一组相同类型元素的集合

数组的创建

type_t arr_name [const_n];

//type是指数组的元素类型

//const_n是一个常量表达式,来指定数组的大小

数组的初始化在创建数组的同时给数组的内容一些合理初始值。

不完全初始化时,剩下的元素默认初始化为0

C语言从入门到精通——初阶4 数组_第1张图片

  • strlen只能求字符串长度,库函数,需要引用头文件
  • sizeof计算变量,数组,类型的大小,单位是字节,是操作符

  1. 数组时使用下标来访问的,下标是从0开始
  2. 数组的大小可以通过计算得到   sz=sizeof(arr)/sizeof(arr[0]);

C语言从入门到精通——初阶4 数组_第2张图片

 58 二维数组

二维数组初始化的时候只能省略行数,不能省略列数

一维数组和二维数组在内存中都是连续存储的(二维数组一行内部连续,跨行也是连续的)

C语言从入门到精通——初阶4 数组_第3张图片

 59 数组作为函数参数

 //冒泡排序

思想:两两相邻的元素进行比较,并且可能的话需要交换。

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.&数组名——数组名表示整个数组,&数组名取出的是整个数组的地址

(数组的地址从值上面看和首元素地址一样,但意义不一样)

C语言从入门到精通——初阶4 数组_第4张图片

61 数组的应用实例1:三子棋

64 数组的应用实例2:扫雷游戏

C语言从入门到精通——初阶4 数组_第5张图片

 小游戏笔记参考链接:

​​​​​​​三子棋游戏设计及代码实现_西西西西西西西西西的博客-CSDN博客

扫雷游戏设计及代码实现_西西西西西西西西西的博客-CSDN博客_扫雷游戏的设计与实现

 76 78 数组作业讲解

C语言从入门到精通——初阶4 数组_第6张图片

   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

你可能感兴趣的:(《C语言从入门到精通》比特科技,#,视频笔记,c语言,开发语言,数据结构)