1. 数组基础概念与内存布局
在C语言中,数组是最基础也是最重要的数据结构之一。它本质上是一块连续的内存空间,用于存储相同类型的多个元素。这种连续存储的特性带来了两个关键特征:一是可以通过下标快速访问任意元素(时间复杂度O(1)),二是数组的大小在定义时就必须确定且不可改变。
1.1 一维数组的定义与初始化
标准的一维数组定义语法为:
c复制数据类型 数组名[常量表达式];
这里的常量表达式必须能在编译时确定其值。例如:
c复制int scores[5]; // 声明包含5个整数的数组
float temps[31]; // 声明31个浮点数的数组(如一个月的每日温度)
数组初始化有多种方式:
c复制// 方式1:完全初始化
int primes[5] = {2, 3, 5, 7, 11};
// 方式2:部分初始化(剩余元素自动初始化为0)
int evens[10] = {0, 2, 4, 6};
// 方式3:省略长度(编译器自动计算)
int days[] = {31, 28, 31, 30}; // 长度为4
重要提示:数组越界访问是C语言中最常见的错误之一。编译器不会检查数组下标是否合法,越界访问可能导致程序崩溃或数据损坏。
1.2 数组的内存布局与指针关系
理解数组在内存中的实际存储方式至关重要。假设有如下定义:
c复制int arr[3] = {10, 20, 30};
内存布局示意图:
code复制地址 | 值
---------|----
0x1000 | 10 (arr[0])
0x1004 | 20 (arr[1])
0x1008 | 30 (arr[2])
数组名arr实际上是一个指向数组首元素的常量指针。以下表达式是等价的:
c复制arr[1] == *(arr + 1)
&arr[0] == arr
这种等价性揭示了数组和指针的深层关系,也是理解后续字符串操作的基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 多维数组与矩阵运算
2.1 二维数组的定义与初始化
二维数组可以看作"数组的数组",常用于表示矩阵或表格数据。定义语法:
c复制数据类型 数组名[行数][列数];
初始化示例:
c复制//
