第九章——数组 第一节——一维数组的定义与初始化

第九章——数组 第一节——一维数组的定义与初始化

亓翎_Re-Tikara Lv5

数组

  数组是C语言所提供的最简单的构造类型。每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元。

🎯 核心目标:掌握一维数组的定义规则、初始化方式及内存分配机制


一维数组的定义

🔧 基本语法与规则

1
类型名 数组名[整型常量表达式];

示例代码如下:

1
int a[5];
  • 定义三要素
    1. 类型名(如 int, char
    2. 数组名(合法标识符,如 a, score
    3. 长度(常量表达式,如 5, N

📦 内存分配规则

  • 连续存储:数组元素在内存中占用连续空间
  • 字节数计算数组长度 * sizeof(元素类型)
  • 地址特性:数组名是首地址常量,不可修改

🚫 常见错误与避坑指南

错误类型 错误代码示例 修复方法
变量定义长度 int n=5; int a[n]; 改为 int a[5];
越界访问 a[5] = 10;(长度为5) 确保下标范围 0到总长度-1,对于这个东西的个人理解就是超出范围了,数组是从0开始的,而我们习惯1开始
非整型下标 float a[3.5]; 下标必须为整型常量表达式

一维数组的初始化

✅ 初始化方式对比

初始化类型 语法示例 内存效果
完全初始化 int a[5] = {1,2,3,4,5}; 全部元素赋初值
部分初始化 int a[5] = {1,2}; 未显式初始化的元素默认为0
省略长度 int a[] = {1,2,3}; 编译器自动推导长度为3
静态数组默认值 static int a[3]; 默认初始化为0

🧠 关键点解析

  • 默认值规则:未初始化的局部数组元素值为随机数,静态数组默认为0
  • 长度省略技巧char c[] = {'a'}; 等价于 char c[1] = {'a'};
  • 错误案例int a[3] = {1,2,3,4}; ❌(初始值过多)

说明

  • 数组不初始化,其元素值为随机数
  • 对static数组元素不赋初值,系统自动赋0
  • 部分元素赋初值,其余为0
  • 全部元素赋初值,可以不指定长度

真题实战与调试技巧

🧪 真题1(2005年4月)

题目:以下能正确定义一维数组的选项是
A. int a[5]={0,1,2,3,4,5};
B. char a[]={'0','1','2','3','4','5'};
C. char a={'A','B','C'};
D. int a[5]="0123";

答案:B
解析

  • A选项初始值个数超过数组长度
  • C选项缺少数组定义符号[]
  • D选项字符串长度隐含+1(包含\0),实际需长度为5

🧪 真题2(数组越界陷阱)

代码

1
2
int a[3] = {0}; 
printf("%d", a[3]); // ❓输出什么?

答案:输出随机值或导致崩溃
解析:数组下标越界访问了未分配的内存


高级技巧与调试方法

🔍 调试技巧:观察数组内存布局

1
2
3
4
5
6
7
8
#include <stdio.h>
int main() {
int a[3] = {0x11223344, 0x55667788, 0x99AABBCC};
for(int i=0; i<3; i++) {
printf("a[%d] 地址: %p 值: %x\n", i, &a[i], a[i]);
}
return 0;
}

输出示例(小端序机器):

1
2
3
a[0] 地址: 0061FF1C 值: 11223344  
a[1] 地址: 0061FF20 值: 55667788
a[2] 地址: 0061FF24 值: 99AABBCC

结论:数组元素连续存储,地址递增


🎯 总结口诀

1
2
3
4
数组定义三要素,连续存储按索引  
初始化可省长度,静态默认零填充
越界访问风险高,调试打印看地址
真题多练避坑道,一维基础要打牢
  • 标题: 第九章——数组 第一节——一维数组的定义与初始化
  • 作者: 亓翎_Re-Tikara
  • 创建于 : 2026-02-07 02:21:28
  • 更新于 : 2026-02-07 02:26:19
  • 链接: https://re-tikara.fun/Blog/posts/c960dd98/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。