C#个人学习笔记之 数组的介绍--006
C# 数组 超详细学习笔记一、数组概述1. 什么是数组数组是相同数据类型的一组有序数据集合属于引用类型存放在堆内存中。作用批量存储多个同类型数据避免定义大量单独变量。2. 数组特点长度固定数组一旦创建长度不可修改元素类型统一所有元素必须是声明的同一数据类型下标索引从0开始最后一个索引 数组长度 - 1支持多维数组、交错数组二、一维数组最常用1. 数组声明 初始化 四种写法写法1先声明再赋值分步初始化// 1. 声明数组仅定义引用无内存空间int[]nums;// 2. 创建数组并分配内存指定长度为 3numsnewint[3];// 3. 给元素逐个赋值nums[0]10;nums[1]20;nums[2]30;写法2声明 分配内存默认值填充数值类型默认值0引用类型默认值nullbool 默认false// 创建长度为 5 的 int 数组元素默认都是 0int[]arrnewint[5];写法3声明 直接赋值简写1// 编译器自动识别数组长度int[]arrnewint[]{1,2,3,4};写法4最简写法日常笔记/开发首选// 省略 new int[]最简洁int[]arr{11,22,33};2. 数组取值 改值通过索引操作元素int[]arr{100,200,300};// 取值Console.WriteLine(arr[0]);// 输出 100// 改值arr[1]999;Console.WriteLine(arr[1]);// 输出 999异常提醒访问超出索引范围会抛出IndexOutOfRangeException索引越界异常。3. 遍历一维数组3种常用方式方式1for 循环可修改元素适合需要操作下标、修改元素场景int[]arr{5,6,7,8};// arr.Length 获取数组长度for(inti0;iarr.Length;i){Console.WriteLine(arr[i]);}方式2foreach 循环只读遍历推荐纯查看语法简洁不能修改数组元素仅用来读取int[]arr{1,3,5,7};foreach(intiteminarr){Console.WriteLine(item);}方式3while/do-while 循环了解即可int[]arr{2,4,6};inti0;while(iarr.Length){Console.WriteLine(arr[i]);i;}三、二维数组表格/矩阵格式二维数组 行 列分为规则二维数组和交错数组。1. 规则二维数组每行列数一致主流用法声明与初始化// 写法1指定行数、列数默认值 0int[,]arr1newint[2,3];// 2行3列// 写法2直接赋值int[,]arr2newint[2,2]{{1,2},{3,4}};// 写法3最简简写int[,]arr3{{10,20},{30,40}};取值、赋值int[,]arr{{1,2},{3,4}};arr[0,1]99;// 第0行第1列 赋值Console.WriteLine(arr[1,0]);// 取第1行第0列二维数组遍历int[,]arr{{1,2,3},{4,5,6}};// GetLength(0) 总行数 GetLength(1) 总列数introwsarr.GetLength(0);intcolsarr.GetLength(1);for(inti0;irows;i){for(intj0;jcols;j){Console.Write(arr[i,j] );}Console.WriteLine();// 换行}2. 交错数组数组中的数组每行长度可不同语法int[][]锯齿数组每行是一个独立一维数组// 1. 声明交错数组3行每行长度暂时不确定int[][]jagArrnewint[3][];// 2. 单独给每一行分配不同长度jagArr[0]newint[2]{1,2};jagArr[1]newint[3]{3,4,5};jagArr[2]newint[1]{6};// 遍历交错数组foreach(varrowinjagArr){foreach(variteminrow){Console.Write(item );}Console.WriteLine();}区别总结int[,]规则二维数组矩形int[][]交错数组锯齿形每行长度不一样四、数组常用属性 静态方法System.Array1. 核心属性数组名.Length获取总元素个数一维/二维通用2. 常用静态方法需引用using System;1Array.Sort() 数组升序排序int[]arr{9,1,5,3};Array.Sort(arr);// 原地升序foreach(variteminarr)Console.Write(item );// 1 3 5 92Array.Reverse() 数组反转int[]arr{1,2,3};Array.Reverse(arr);foreach(variteminarr)Console.Write(item );// 3 2 13Array.Clear() 清空元素恢复默认值int[]arr{10,20,30};Array.Clear(arr,0,arr.Length);// 从索引0开始清空全部Console.WriteLine(arr[0]);// 04Array.IndexOf() 查找元素索引找到返回索引找不到返回-1int[]arr{2,4,6};intindexArray.IndexOf(arr,4);Console.WriteLine(index);// 1五、值类型 引用类型 数组内存简析面试常考数组本身是引用类型变量名存的是内存地址栈中数组元素元素为int/double/bool值类型元素值存在堆内存元素为string/自定义类引用类型堆中存地址数组赋值是地址传递两个数组变量指向同一块内存int[]a{1,2,3};int[]ba;// b 和 a 指向同一个数组b[0]99;Console.WriteLine(a[0]);// 99 a 也被修改六、易错点总结笔记重点标记索引从0开始严防索引越界数组长度定义后不可更改如需动态扩容用ListTforeach只能读取不能修改数组元素int[,]和int[][]语法、结构完全不同不要混用数组直接赋值属于引用传递不是值拷贝七、课后练习自测定义一个字符串数组存储 5 个姓名遍历输出定义二维数组 3行2列赋值并嵌套循环遍历对一个乱序 int 数组排序、反转并输出