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字节
相关推荐
在黎明的反思2 小时前
文件级建议性锁函数flock
c语言·c++
火红色祥云3 小时前
深度学习入门:基于Python的理论与实现笔记
笔记·python·深度学习
Aliex_git3 小时前
gzip 压缩实践笔记
前端·网络·笔记·学习
liuchangng3 小时前
BMAD-METHOD实战笔记_20260213112550
笔记
2501_901147833 小时前
打家劫舍问题的动态规划解法与性能优化笔记
笔记·算法·动态规划
像豆芽一样优秀4 小时前
Easy-Vibe Task02学习笔记
笔记·学习
嵌入小生0074 小时前
进程(2)---相关函数接口、消亡、exec函数族 | 嵌入式(Linux)
linux·c语言·嵌入式·进程·函数接口·exec函数族·进程的消亡
wdfk_prog4 小时前
EWMA、加权平均与一次低通滤波的对比与选型
linux·笔记·学习·游戏·ssh
Hello_Embed4 小时前
STM32F030CCT6 开发环境搭建
笔记·stm32·单片机·嵌入式·freertos