C语言笔记一维&二维数组

文章目录

一、一维数组的创建

C99标准前,[ ]中必须要给常量或常量表达式
C99标准后,支持了变长数组,但是这种情况下只允许定义,不允许初始化
c 复制代码
// 1.C99标准前,[]中必须要给常量或常量表达式
int arr[10];
char arr1[5 + 3];
// 2.C99标准后,支持了变长数组,但是这种情况下只允许定义,不允许初始化
int n = 10;
int arr2[n];
return 0;

二、一维数组的初始化

注意:字符数组的两种初始化方式,注意做辨别
c 复制代码
// 1.部分初始化
int arr[5] = {1, 2, 3}; // 数组大小为5,数组中初始化为1 2 3 0 0
// 2.完全初始化
int arr1[5 + 3] = {1, 2, 3, 4, 5, 6, 7, 8}; // 数组大小为8
// 3.不指定数组大小,根据元素个数进行初始化
int arr2[] = {1, 2, 3, 4, 5}; // 数组大小为5
// 4.字符数组的两种初始化方式,注意做辨别
char arr3[] = {'a', 'b', 'c'}; // 数组大小为3
char arr4[] = "abc";           // 数组大小为4,含\0
// 注意,这两种初始化方式虽然得到的结果相同但是初始化的过程是不同的,注意区别!
char arr5[5] = {'a', 'b', 'c'}; // 数组大小为5 初始化数据为 a,b,c 未初始化部分编译器补2个\0
char arr6[5] = "abc";           // 数组大小为5 初始化数据为 a,b,c,\0 未初始化部分编译器补1个\0
return 0;

三、二维数组的创建和初始化

注意:二维数组行数可省略但列数不可以省略
c 复制代码
// 1.完全初始化
int arr[3][2] = {1, 2, 3, 4, 5, 6};
// 2.不完全初始化
int arr1[3][2] = {1, 2, 3, 4};
// 3.分组不完全初始化
int arr2[3][2] = {{1, 2}, {3}, {4, 5}};
// 4.注意:二维数组行数可省略但列数不可以省略
int arr3[][2] = {1, 2, 3}; // 自动生成arr[0]和arr[1]
return 0;

四、数组名做为函数参数

数组名做为形参传递时实际上传的是首元素的地址,所以若想求元素个数不能在自定义的函数中计算而是要用参数传递。

以冒泡排序为例:

c 复制代码
void bubble_Sort(int arr[], int sz)// 可以用数组接收也可以用指针接收
{ 
	int i = 0;
	// 排序趟数
	for (i = 0; i < sz - 1; i++)
	{
		// 每一趟冒泡排序
		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;
			}
		}
	}
}
c 复制代码
int arr[] = {5, 8, 7, 3, 15, 9, 10, 2};
int sz = sizeof(arr) / sizeof(arr[0]);
// 排升序
bubble_Sort(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
	printf("%d ", arr[i]);
}
数组名的理解--除了下面两个特例其余情况下一维数组名代表首元素的地址,二维数组是首行地址

两个特例:

①sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。

②&数组名,取出的是数组的地址。 &数组名,数组名表示整个数组

c 复制代码
int arr1[] = {5, 6, 7, 8, 9};
printf("%p\n", arr1);     // 0000003f5abff850
printf("%p\n", arr1 + 1); // 0000003f5abff854
printf("----------------\n");
printf("%p\n", &(arr1[0]));     // 0000003f5abff850
printf("%p\n", &(arr1[0]) + 1); // 0000003f5abff854
printf("----------------\n");
printf("%p\n", &arr1);     // 0000003f5abff850
printf("%p\n", &arr1 + 1); // 0000003f5abff864 即加的是整个数组元素大小20字节 0x16换为10进制是20
c 复制代码
int arr2[2][3] = {5, 6, 7, 8, 9};
printf("%p\n", arr2);     // 0000005ec65ffc90
printf("%p\n", arr2 + 1); // 0000005ec65ffc9c 一行3个元素,12字节
printf("----------------\n");
printf("%p\n", &(arr2[0]));     // 0000005ec65ffc90
printf("%p\n", &(arr2[0]) + 1); // 0000005ec65ffc9c
printf("----------------\n");
printf("%p\n", &arr2);     // 0000005ec65ffc90
printf("%p\n", &arr2 + 1); // 0000005ec65ffca8  即加的是整个数组元素大小24字节
相关推荐
用户962377954481 天前
VulnHub DC-1 靶机渗透测试笔记
笔记·测试
齐生12 天前
iOS 知识点 - IAP 是怎样的?
笔记
tingshuo29173 天前
D006 【模板】并查集
笔记
tingshuo29173 天前
S001 【模板】从前缀函数到KMP应用 字符串匹配 字符串周期
笔记
RuoZoe4 天前
重塑WPF辉煌?基于DirectX 12的现代.NET UI框架Jalium
c语言
祈安_7 天前
C语言内存函数
c语言·后端
西岸行者9 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
norlan_jame9 天前
C-PHY与D-PHY差异
c语言·开发语言
czy87874759 天前
除了结构体之外,C语言中还有哪些其他方式可以模拟C++的面向对象编程特性
c语言
starlaky9 天前
Django入门笔记
笔记·django