C# 数组 最终完整版全套笔记(一维+多维+交错+引用类型+对象数组)

总纲】数组通用所有考点(全部数组通用)

1. 数组核心定义

数组是存储相同类型数据、长度固定、内存连续有序的容器,所有数组都继承自 Array 类。

2. 通用铁律(必考)

  • 数组一旦创建,长度不可修改

  • 下标(索引)从 0 开始

  • 合法下标范围:0 ~ 长度-1

  • 越界报错原因:下标超过当前维度最大范围

3. 各类数组默认值

  • int、double 数值类型:默认 0

  • bool 类型:默认 false

  • string、object、自定义类 引用类型:默认 null

  • char 类型:默认 \0 空字符

4. for 与 foreach 终极区别

  • for:有下标、可读、可修改数组元素、灵活

  • foreach:简洁快速、无下标、只读、不能修改原数组

5. 通用坑点

直接打印数组变量名,输出的是数组类型名,不会输出元素内容。


第一部分:一维数组(基础必考)

1. 语法格式

数据类型[] 数组名

2. 四种定义方式

    1. 先声明、后开辟空间:int[] arr; arr = new int[5];
    1. 指定长度+初始化元素:int[] arr = new int[3]{1,2,3};
    1. 不指定长度自动推断:int[] arr = new int[]{1,2,3};
    1. 最简字面量:int[] arr = {1,2,3};

3. 遍历规则

for循环条件:i < 数组名.Length

4. Object万能数组

object[] 可以存放任意类型数据,缺点:运算需要强制类型转换


第二部分:多维数组(二维、三维|规则表格)

1. 维度判定口诀

逗号个数 + 1 = 维度数

  • int[,] → 1个逗号 → 二维数组(行、列)

  • int[,,] → 2个逗号 → 三维数组(块、行、列)

2. 核心特征

多维数组是规则表格结构 ,每一行、每一列长度必须完全一致

3. 两种定义方式

  • 指定维度长度:int[,] arr = new int[2,3];

  • 自动推导维度:根据嵌套大括号自动识别行列数

4. 四大核心属性

  • Rank:获取维度数

  • Length:获取总元素个数

  • LongLength:64位总元素数

  • GetLength(n):获取指定维度长度

5. 维度对应规则

  • 二维:GetLength(0)=行数,GetLength(1)=列数

  • 三维:GetLength(0)=块数,GetLength(1)=行数,GetLength(2)=列数

6. 取值赋值语法

二维:数组[行,列]

三维:数组[块,行,列]

⚠️ 多维数组只能单括号+逗号,不能写 [i][j]

7. 遍历方式

  • 嵌套for循环:精准遍历、可改值、可获取下标

  • foreach:平铺遍历所有元素、只读无下标


第三部分:交错数组(锯齿数组|不规则数组)

1. 核心定义

交错数组是数组套数组,外层数组的每一个元素,都是一个独立的一维数组。

2. 最大特征(必考区分)

内层数组长度可以不同,长短参差不齐,属于不规则数组。

3. 语法格式

二维交错:int[][] (双中括号,无逗号)

三维交错:int[][][]

4. 初始化规则

外层数组批量装入多个长度不同的内层一维数组。

5. 取值赋值

取值格式:数组[外层下标][内层下标]

支持定点修改:ints[i][j] = 数值

6. 遍历规则(重点)

  • 外层循环:数组名.Length

  • 内层循环:数组名[i].Length(必须动态获取,不能写死)

  • 支持双层for、双层foreach遍历


第四部分:数组引用类型特性(超级必考)

1. 核心结论

数组属于引用类型 ,赋值操作传递的是内存地址,不是复制数据。

2. 代码原理

复制代码
int[] arr = new int[] { 1, 2, 3 };
int[] arr2 = arr; // 引用赋值:两个数组指向同一块内存

arr[0] = 999;  // 修改原数组
Console.WriteLine(arr2[0]); // 输出999,同步改变

3. 必背规则

  • 值类型赋值:拷贝数值,互不影响

  • 数组(引用类型)赋值:拷贝地址,两个数组指向同一堆内存

  • 修改任意一个数组元素,另一个数组同步变化


第五部分:对象数组(自定义类数组)

1. 概念

存储自定义类对象的数组,数组每一个元素都是一个对象,默认值为 null。

2. 语法公式(必背)

类名[] 数组名 = new 类名[长度];

3. 完整代码案例

复制代码
// 定义数组:开辟10个People类型空间,默认全部为null
People[] p1s = new People[10];

// 循环批量创建对象、赋值、存入数组
for (int i = 0; i < p1s.Length; i++)
{
    People p1 = new People() { Name = "学生" + i };
    p1s[i] = p1; // 将对象存入数组对应下标
}

// 遍历对象数组
foreach (People p in p1s)
{
    Console.WriteLine(p.Name + "+++");
}

4. 易错点

  • 只 new 数组,不会自动 new 对象,元素默认是 null

  • 必须手动循环 new 对象并赋值给数组下标,否则访问属性报错(空引用异常)


第六部分:string.Join() 数组快速拼接方法

1. 作用

将数组所有元素,按照指定分隔符拼接成一个完整字符串。

2. 语法

string.Join("分隔符", 数组名);

3. 案例

复制代码
int[] arr = new int[] { 999, 2, 3 };
string res = string.Join("-", arr);
Console.WriteLine(res); // 输出:999-2-3

4. 优势

无需循环遍历,一键输出数组所有元素,考试高频输出写法。


第七部分:三大数组终极对比(考试简答题满分)

1. 语法区别

  • 一维数组:[]

  • 多维数组:[,] 逗号分隔、规则表格

  • 交错数组:[][] 多括号嵌套、不规则锯齿

2. 结构区别

  • 多维数组:所有行列长度统一,整体表格

  • 交错数组:每行长度可以不一样,数组嵌套数组

3. 取值区别

  • 多维:[行,列]

  • 交错:[外层][内层]

4. 长度获取区别

  • 多维数组:GetLength(维度)

  • 交错数组:外层.Length / 内层[i].Length


第八部分:数组全套易错点汇总(满分避坑)

    1. 数组长度固定,不支持扩容
    1. 所有下标遵循:最大下标 = 长度 - 1,禁止越界
    1. 一维遍历用 Length,多维遍历必须用 GetLength()
    1. 多维逗号[,]、交错双括号[][],语法绝对不能混用
    1. 交错数组内层长度不统一,遍历必须动态获取长度
    1. foreach 遍历所有数组都是只读,不能修改原数据
    1. 直接打印数组名输出类型,不输出元素
    1. 数组是引用类型,赋值共享内存,一改全改
    1. 对象数组只new数组不new对象,会出现null空引用报错

第九部分:终极默写短句(考前必背完整版)

  • 数组固定长度存同类,下标从零起,最大长度减一

  • 数值默认0,布尔false,字符串对象null,字符空

  • for带下标可改值,foreach简洁只读无下标

  • 多维逗号规则表,行列长度都统一

  • 交错括号数组套,内层长度不统一

  • 多维取值逗号隔,交错取值双层括

  • 数组属于引用类型,赋值传地址,一改全同步

  • 对象数组先开空间,循环new对象赋值防空指针

  • string.Join快速拼接,一键输出数组所有元素

相关推荐
ForgeAI码匠2 小时前
Maven 多模块项目如何避免越写越乱?Forge Admin 的模块边界实践
java·人工智能·开源·maven
Access开发易登软件2 小时前
Access 和 SQLite,根本不在一个赛道上
java·jvm·数据库·sqlite·excel·vba·access开发
小马爱打代码2 小时前
Spring源码 第十篇:Spring 5 源码深度拆解 - Spring 类型转换与校验体系
java·spring
长谷深风1112 小时前
Java 面试高频:反射机制与异常体系全面解析
java·开发语言·面试·exception·java 反射·java 异常·class 对象
searchforAI2 小时前
B站视频转笔记用哪个工具?2026年四款AI笔记工具对比实测
人工智能·经验分享·笔记·gpt·学习·视频总结·ai笔记
过期动态2 小时前
【LeetCode 热题 100】盛最多水的容器
java·数据结构·spring boot·算法·leetcode·spring cloud·职场和发展
一 乐2 小时前
疫苗发布和接种预约|基于Java+vue疫苗发布和接种预约系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·疫苗发布和接种预约系统系统
2301_780789662 小时前
高防cdn如何缓存网页静态资源
java·spring·web安全·缓存·kubernetes·ddos
小马爱打代码2 小时前
Spring源码 第十一篇:Spring 扩展点全解析 - 从容器启动到 Bean 生命周期的完整执行时序
java·后端·spring