C语言学习笔记——数组章节

学习小结

c语言数组学习笔记汇总

//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include <string.h>
//数组

//本章的重点
//1、一维数组的创建和初始化
//2、一维数组的使用
//3、一维数组在内存中的
//4、二维数组的创建和初始化存储
//5、二维数组的使用
//6、二维数组在内存中的存储
//7、数组作为函数参数
//8、数组的实际应用1:三子棋
//9、数组的实际应用2、扫雷游戏

//一维数组的创建和初始化

//数组的创建
//数组是一组相同类型元素的集合
//注意:数组创建,[] 中的大小的必须是一个常量表达式,用来指定字符的大小
//int main()
//{
//	//创建一个数组-存放整形-10个
//	int arr[10];
//	//创建一个数组-存放字符
//	char arr2[5];
//
//	//int n = 5;
//	//char ch[n];//此代码会报错,数组大小的创建必须是常量
//
//	return 0;
//}

//数组的初始化
//是指在创建数组的同时给数组的内容一些合理的初始值(初始化)
//int main()
//{
//	int arr[10] = { 1,2,3,4 };//不完全初始,剩下的元素默认初始化为0
//	char arr2[5] = { 'a','b'};//b字符的ascll编码是98
//	char arr1[5] = "ab";
//	char arr3[] = "abcdef";
//	printf("%d\n", sizeof(arr3)); //7 sizeof是计算arr4所占空间的大小
//	printf("%d\n", strlen(arr3)); //6 strlen是求字符串的长度,到’\0‘停止
//	return 0;
//}

//1、strlen 和sizeof 没有什么关联
//2、strlen是求字符串长度的,只能针对字符串求长度 - 库函数 -使用需要引用头文件
//3、sizeof 是计算变量、数组、类型的大小-单位是字节 - 操作符

//int main()
//{
//	char arr1[] = "abc";
//	char arr2[] = { 'a','b','c' };
//	printf("%d\n", sizeof(arr1));// 4
//	printf("%d\n", sizeof(arr2));// 3
//	printf("%d\n", strlen(arr1));// 3
//	printf("%d\n", strlen(arr2));// 随机数 因为strlen函数直到碰到 '\0' 才停止计算
//	return 0;
//}

//一维数组的使用
//int main()
//{
//	char arr[] = "abcdef";
//	int i = 0;//下标
//	int sz = strlen(arr);//元素个数
//	for (i = 0; i < sz; i++)
//	{
//		printf("%c\n", arr[i]);
//	}
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i = 0;//下标
//	int sz = sizeof(arr)/sizeof(arr[0]);//元素个数
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d\n", arr[i]);
//	}
//	return 0;
//}
//注意:
//1、数组是使用下标来进行访问的,下标是从0开始
//2、数组的大小可以通过计算得到

//一维数组在内存中的存储
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%p\n", &arr[i]);//打印每个元素的地址
//		//0000004F207AF568
//		//0000004F207AF56C
//		//0000004F207AF570
//		//0000004F207AF574
//		//0000004F207AF578
//		//0000004F207AF57C
//		//0000004F207AF580
//		//0000004F207AF584
//		//0000004F207AF588
//		//0000004F207AF58C
//		//由以上的16进制的地址结果可知数组在内存中是连续存放的
//	}
//	return 0;
//}

//二维数组的创建与初始化
//二维度数组的创建
//int main()
//{
//	int arr[3][4];//三行四列
//	char arr1[3][5];//三行五列
//	//第一个方括号指定行,第二个方括号指定列
//	return 0;
//}
//二维数组的初始化
//int main()
//{
//	int arr[3][4] = { 1,2,3,4,5 };//三行四列
//	int arr1[3][4] = { {1,2,3},{4,5} };//把第一行和第二行分别当成一维数组
//	//char arr2[][] = { {1,2,3,4},{5,6,7,8} };//错误“arr2” : 缺少下标	
//	//char arr3[][] = { 1,2,3,4,5,6,7,8 };//错误“arr3” : 缺少下标	
//	char arr3[][4] = { 1,2,3,4,5,6,7,8 };
//	//注意:列方括号中的大小是不能被省略的
//	return 0;
//}

//二维数组的使用
//二维数组的使用依然是通过下标进行使用
//注意:行和列的下标依然是从0开始的
//int main()
//{
//	int arr[3][4] = { {1,2,3},{4,5} };
//	int i = 0;//行的下标
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;//行中元素的下标
//		for (j = 0; j < 4; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");//换行
//	}
//	return 0;
//}
//1 2 3 0
//4 5 0 0
//0 0 0 0

//二维数组在内存中的存储
//int main()
//{
//	int arr[3][4] = { {1,2,3},{4,5} };
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 4; j++)
//		{
//			printf("%p\n ", &arr[i][j]);
//		}
//		printf("\n");//换行
//	}
//	return 0;
//}
//000000F485DCF818 000000F485DCF81C 000000F485DCF820 000000F485DCF824
//000000F485DCF828 000000F485DCF82C 000000F485DCF830 000000F485DCF834
//000000F485DCF838 000000F485DCF83C 000000F485DCF840 000000F485DCF844
//注意:二维数组由以上的16进制的地址结果可知数组在内存中也是连续存放的
//可以理解为二维数组是由多个一维数组的组成的

//数组作为函数参数
//实现一个冒泡函数,将一个整形数组进行排序
//冒泡排序算法的原理如下:
//比较相邻的元素。如果第一个比第二个大,就交换他们两个。=
//对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。=
//针对所有的元素重复以上的步骤,除了最后一个。=
//持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
//void bubble(int arr[],int sz)
//{
//	//确定冒泡排序的趟数
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		int flag = 1;//假设这一趟要排序的数据已经有序了
//		//每一趟冒泡排序
//		int j = 0;
//		for (j = 0; j < sz-1-i; j++)
//		{
//			if (arr[j] > arr[j + 1])
//			{
//				int tmp = 0;//临时变量
//				tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//				flag = 0;//本躺排序的数据是不完全有序
//			}
//		}
//		if (flag == 1)
//			break;
//	}
//}
//int main()
//{
//	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//	//对arr数组进行排序,变成升序
//	bubble(arr,sz);//冒泡排序函数
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	printf("%p\n", &arr);
//	printf("%p\n", &arr[0]);
//	printf("%d\n", *arr);//1    *解引用
//	printf("%d\n", sz);
//	return 0;
//}
//运行结果
//000000F03A0FFCA8
//000000F03A0FFCA8
//注意:通常数组名就是首元素的地址(除了两种情况)
//1、sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示的是整个数组
//2、&数组名,取出的是数组的地址。&数组名,数组名表示整个数组

//void bubble(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz-1; i++)
//	{
//		int flag = 0;
//		int j = 0;
//		for (j = 0; j < sz-1-i; j++)
//		{
//			if (arr[j] > arr[j + 1])
//			{
//				int tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//				flag = 1;
//			}
//		}
//		if (flag == 0)
//			break;
//	}
//}
//int main()
//{
//	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//	bubble(arr,sz);//冒泡排序函数
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

以上代码均在vs2022环境下编译

猜你喜欢

转载自blog.csdn.net/qq_72935001/article/details/126063333