C语言数组核心知识点速记
一、数组是什么?(核心定义)
数组:同一数据类型、连续内存、批量存储的一组变量
通俗理解:
普通变量 = 单个盒子
数组 = 一排连续、大小相同、编号有序的盒子
数组三大特性(必考)
-
类型统一:数组里所有元素必须是同一种类型(int就全int,char就全char)
-
内存连续:所有元素地址紧紧相连,没有空隙
-
下标从0开始:第1个元素下标是0,不是1
二、一维数组(最基础、最重要)
1. 一维数组定义语法
数据类型 数组名[数组长度];
示例:int arr[5]; // 定义能存5个int的数组
2. 一维数组初始化(四种写法)
写法1:完全初始化(填满)
int arr[5] = {1,2,3,4,5};
写法2:部分初始化(剩余自动补0)【超级高频考点】
int arr[5] = {1,2}; // 结果:1 2 0 0 0 // 未初始化元素默认 = 0
写法3:省略长度初始化(编译器自动数个数)
int arr[] = {1,3,5}; // 自动长度 = 3
写法4:完全不初始化
int arr[5]; // 局部数组:随机垃圾值 // 全局数组:默认全0
3. 数组访问、遍历
访问语法:数组名[下标]
下标范围:0 ~ 长度-1
标准遍历模板(以后写代码永远这套):
for(int i = 0; i < 5; i++) { printf("%d ", arr[i]); }
4. 一维数组经典易错点
-
数组下标不能越界(越界不报错、乱改内存、程序崩溃)
-
数组长度C89必须是常量
-
C99支持变量长度数组VLA(考试常考区别)
-
数组名代表首元素地址,是常量地址,不能赋值
三、数组内存深度理解(考试大题考点)
1. 数组地址连续
arr[0]、arr[1]、arr[2]... 地址依次相隔 一个元素字节大小
int数组:每个元素相差4字节
char数组:每个元素相差1字节
2. sizeof 求数组总大小(超级重点)
sizeof(数组名) = 整个数组总字节数
求数组元素个数公式(万能公式):
int len = sizeof(arr) / sizeof(arr[0]);
示例:
int arr[5]; // sizeof(arr) = 20 // sizeof(arr[0]) = 4 // 长度 = 5
四、字符数组与字符串(最大考点、最容易混)
1. 普通字符数组
char ch[3] = {'a','b','c'};
没有 \0,不是字符串,不能用%s打印
2. 字符串字符数组(自带 \0)
char str[4] = {"abc"}; // 内存:a b c \0
双引号初始化自动补 \0
3. strlen 和 sizeof 绝杀区别(必考)
-
strlen():有效字符长度,不计\0,需要头文件 string.h
-
sizeof:数组总内存大小,包含\0
例子:
char s[] = "hi"; strlen(s) // 2 sizeof(s) // 3 (h i \0)
五、二维数组(表格数组)
1. 定义
类型 数组名[行][列]
int arr[2][3]; // 2行3列
2. 初始化方式
完整初始化:
int a[2][3] = { {1,2,3}, {4,5,6} };
简写初始化:
int a[2][3] = {1,2,3,4,5,6};
部分初始化,剩余补0:
int a[2][3] = {1,2};
3. 二维数组唯一规则(考试死记)
行可以省略,列绝对不能省略!
int a[][3] = {1,2,3,4}; // 合法 // int a[2][] = ... 非法!
4. 二维数组遍历模板
for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) { printf("%d ", arr[i][j]); } }
六、数组与函数(超级重难点)
1. 数组传参本质
数组传参不会传整个数组,只会传首元素地址!
所以:函数内sizeof(数组) 得不到真实长度(永远是4或8字节)
2. 数组做函数参数两种写法
void fun(int arr[]) void fun(int *arr)
两种写法完全等价
3. 规范写法(必须手动传长度)
void printArr(int arr[], int len) { for(int i = 0; i < len; i++) printf("%d ", arr[i]); }
七、数组核心考点总结(考前必背)
-
数组下标从0开始,下标越界不报错、运行异常
-
局部数组未初始化:随机值;全局数组默认0
-
部分初始化,未赋值元素自动补0
-
字符串双引号自动补\0,字符数组单引号不会
-
strlen不计\0,sizeof包含\0
-
二维数组:行可省,列不可省
-
数组传参退化为指针,丢失长度信息,必须手动传len
-
C89数组长度必须常量;C99支持变量长度VLA
八、新手必会数组经典题型
1. 数组遍历、求和、平均值
2. 找最大值、最小值
3. 数组反转、排序
4. 字符数组字符串输入输出、长度计算
5. 二维矩阵遍历、对角线求和
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)