C# 数组(Array)详解

📅 2026/7/7 18:36:53 👁️ 阅读次数 📝 编程学习
C# 数组(Array)详解

数组(Array)是 C# 中最常用的数据结构之一,它可以存储多个相同类型的数据,并使用**索引(Index)**来访问每个元素。

例如,一个班级有 50 名学生,如果不用数组,就需要定义 50 个变量:

string student1 = "张三"; string student2 = "李四"; string student3 = "王五";

使用数组后,只需要一个变量:

string[] students = { "张三", "李四", "王五" };

一、什么是数组

数组是一组相同数据类型元素的集合。

特点:

  • 数据类型必须一致
  • 大小固定(创建后不能改变长度)
  • 连续存储
  • 使用索引访问元素
  • 索引从0开始

例如:

int[] nums = { 10, 20, 30, 40 };

内存结构:

索引(Index) 0 1 2 3 ┌───┬───┬───┬───┐ │10 │20 │30 │40 │ └───┴───┴───┴───┘

访问:

Console.WriteLine(nums[0]); //10 Console.WriteLine(nums[2]); //30

二、声明数组

语法:

数据类型[] 数组名;

例如:

int[] numbers; string[] names; double[] prices; bool[] flags;

这里只是声明,没有分配内存。


三、创建数组

使用 new:

int[] numbers = new int[5];

表示:

长度:5 索引: 0 1 2 3 4

默认值:

0 0 0 0 0

输出:

Console.WriteLine(numbers[0]);

结果:

0

四、初始化数组

方法一:先创建再赋值

int[] numbers = new int[3]; numbers[0] = 100; numbers[1] = 200; numbers[2] = 300;

方法二:创建时初始化

int[] numbers = new int[] { 100, 200, 300 };

方法三(最常用)

int[] numbers = { 100, 200, 300 };

或者

int[] numbers = { 100, 200, 300 };

五、访问数组元素

语法:

数组名[索引]

例如:

string[] names = { "Tom", "Jack", "Lucy" }; Console.WriteLine(names[0]); Console.WriteLine(names[1]); Console.WriteLine(names[2]);

输出:

Tom Jack Lucy

六、修改数组元素

int[] score = { 80, 90, 70 }; score[1] = 100; Console.WriteLine(score[1]);

输出:

100

七、数组长度 Length

Length 表示数组元素数量。

int[] nums = { 10, 20, 30, 40 }; Console.WriteLine(nums.Length);

输出:

4

八、遍历数组

方法一:for(最常用)

int[] nums = { 10, 20, 30, 40 }; for (int i = 0; i < nums.Length; i++) { Console.WriteLine(nums[i]); }

输出:

10 20 30 40

为什么使用Length

如果以后数组变成:

int[] nums = {1,2,3,4,5,6,7};

循环无需修改。


方法二:foreach

int[] nums = { 10, 20, 30, 40 }; foreach (int item in nums) { Console.WriteLine(item); }

输出:

10 20 30 40

foreach 特点

优点:

  • 简洁
  • 不容易越界
  • 推荐用于只读遍历

缺点:

不能修改元素。

错误示例:

foreach (int item in nums) { item = 100; //错误 }

九、数组越界

例如:

int[] nums = { 1, 2, 3 }; Console.WriteLine(nums[3]);

数组只有:

0 1 2

访问:

3

运行结果:

IndexOutOfRangeException

即:

索引超出数组范围。


十、数组默认值

不同类型默认值不同。

类型默认值
int0
double0
boolfalse
stringnull
char'\0'
objectnull

例如:

string[] names = new string[3]; Console.WriteLine(names[0] == null);

输出:

True

十一、数组排序

使用Array.Sort()

int[] nums = { 8, 2, 9, 1, 5 }; Array.Sort(nums); foreach (int i in nums) { Console.Write(i + " "); }

输出:

1 2 5 8 9

十二、数组反转

int[] nums = {1,2,3,4,5}; Array.Reverse(nums);

输出:

5 4 3 2 1

十三、查找元素

使用:

Array.IndexOf()

例如:

int[] nums = {10,20,30,40}; int index = Array.IndexOf(nums,30); Console.WriteLine(index);

输出:

2

如果找不到:

Array.IndexOf(nums,100);

输出:

-1

十四、复制数组

int[] nums = {1,2,3}; int[] copy = new int[3]; Array.Copy(nums, copy, 3);

结果:

copy 1 2 3

十五、多维数组

二维数组:

int[,] matrix = { {1,2,3}, {4,5,6} };

内存:

1 2 3 4 5 6

访问:

Console.WriteLine(matrix[1,2]);

输出:

6

遍历:

for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { Console.Write(matrix[i, j] + " "); } Console.WriteLine(); }

输出:

1 2 3 4 5 6

十六、交错数组(Jagged Array)

交错数组是数组中的每个元素仍然是一个数组,每一行长度可以不同。

int[][] jagged = { new int[]{1,2}, new int[]{3,4,5}, new int[]{6} };

访问:

Console.WriteLine(jagged[1][2]);

输出:

5

二维数组与交错数组区别:

二维数组:

1 2 3 4 5 6 7 8 9

交错数组:

1 2 3 4 5 6

十七、数组作为参数

static void Print(int[] nums) { foreach (int n in nums) { Console.WriteLine(n); } }

调用:

int[] arr = {1,2,3}; Print(arr);

十八、数组作为返回值

static int[] GetNumbers() { return new int[] { 10, 20, 30 }; }

调用:

int[] nums = GetNumbers();

十九、params 参数(可变参数)

static int Sum(params int[] nums) { int total = 0; foreach (int i in nums) total += i; return total; }

调用:

Console.WriteLine(Sum(1,2,3)); Console.WriteLine(Sum(1,2,3,4,5));

输出:

6 15

二十、数组与 List<T> 的区别

特性数组(Array)List<T>
长度固定可动态扩容
增删元素不方便非常方便
性能略高略低(扩容时有开销)
适用场景元素数量固定元素数量不确定

示例:

数组:

int[] nums = {1,2,3};

List:

List<int> nums = new List<int>(); nums.Add(1); nums.Add(2); nums.Add(3);

二十一、综合练习

示例:计算平均成绩

using System; class Program { static void Main() { int[] scores = { 88, 92, 75, 99, 81 }; int sum = 0; for (int i = 0; i < scores.Length; i++) { sum += scores[i]; } double average = (double)sum / scores.Length; Console.WriteLine($"总分:{sum}"); Console.WriteLine($"平均分:{average:F2}"); } }

输出:

总分:435 平均分:87.00

二十二、常见错误总结

错误原因正确做法
数组越界索引超出范围使用0 ~ Length - 1
未初始化数组数组为null使用new创建数组
类型不一致数组元素类型必须一致使用统一的数据类型
修改foreach变量foreach变量是只读的使用for修改元素

二十三、学习总结

  • 数组(Array)是存储同一类型数据的固定长度集合。
  • 使用索引(0 开始)快速访问元素,时间复杂度通常为O(1)
  • 使用Length获取元素数量,遍历时推荐结合forforeach
  • 常用静态方法包括:Array.Sort()Array.Reverse()Array.IndexOf()Array.Copy()
  • C# 支持一维数组、二维数组、多维数组和交错数组
  • 当数据数量固定时,数组是高效的选择;当需要频繁增删或动态扩容时,更推荐使用List<T>