当前位置: 首页 > news >正文

C#个人学习笔记之 数组的介绍--006

C# 数组 超详细学习笔记

一、数组概述

1. 什么是数组

数组是相同数据类型的一组有序数据集合,属于引用类型,存放在堆内存中。
作用:批量存储多个同类型数据,避免定义大量单独变量。

2. 数组特点

  1. 长度固定:数组一旦创建,长度不可修改
  2. 元素类型统一:所有元素必须是声明的同一数据类型
  3. 下标(索引)从0开始,最后一个索引 = 数组长度 - 1
  4. 支持多维数组、交错数组

二、一维数组(最常用)

1. 数组声明 + 初始化 四种写法

写法1:先声明,再赋值(分步初始化)
// 1. 声明数组(仅定义引用,无内存空间)int[]nums;// 2. 创建数组并分配内存,指定长度为 3nums=newint[3];// 3. 给元素逐个赋值nums[0]=10;nums[1]=20;nums[2]=30;
写法2:声明 + 分配内存(默认值填充)

数值类型默认值:0;引用类型默认值:null;bool 默认:false

// 创建长度为 5 的 int 数组,元素默认都是 0int[]arr=newint[5];
写法3:声明 + 直接赋值(简写1)
// 编译器自动识别数组长度int[]arr=newint[]{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种常用方式)

方式1:for 循环(可修改元素)

适合需要操作下标、修改元素场景

int[]arr={5,6,7,8};// arr.Length 获取数组长度for(inti=0;i<arr.Length;i++){Console.WriteLine(arr[i]);}
方式2:foreach 循环(只读遍历,推荐纯查看)

语法简洁,不能修改数组元素,仅用来读取

int[]arr={1,3,5,7};foreach(intiteminarr){Console.WriteLine(item);}
方式3:while/do-while 循环(了解即可)
int[]arr={2,4,6};inti=0;while(i<arr.Length){Console.WriteLine(arr[i]);i++;}

三、二维数组(表格/矩阵格式)

二维数组 =行 + 列,分为规则二维数组交错数组

1. 规则二维数组(每行列数一致,主流用法)

声明与初始化
// 写法1:指定行数、列数,默认值 0int[,]arr1=newint[2,3];// 2行3列// 写法2:直接赋值int[,]arr2=newint[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) = 总列数introws=arr.GetLength(0);intcols=arr.GetLength(1);for(inti=0;i<rows;i++){for(intj=0;j<cols;j++){Console.Write(arr[i,j]+" ");}Console.WriteLine();// 换行}

2. 交错数组(数组中的数组,每行长度可不同)

语法:int[][]锯齿数组,每行是一个独立一维数组

// 1. 声明交错数组:3行,每行长度暂时不确定int[][]jagArr=newint[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.Array)

1. 核心属性

  • 数组名.Length:获取总元素个数(一维/二维通用)

2. 常用静态方法(需引用using System;

1)Array.Sort() 数组升序排序
int[]arr={9,1,5,3};Array.Sort(arr);// 原地升序foreach(variteminarr)Console.Write(item+" ");// 1 3 5 9
2)Array.Reverse() 数组反转
int[]arr={1,2,3};Array.Reverse(arr);foreach(variteminarr)Console.Write(item+" ");// 3 2 1
3)Array.Clear() 清空元素(恢复默认值)
int[]arr={10,20,30};Array.Clear(arr,0,arr.Length);// 从索引0开始,清空全部Console.WriteLine(arr[0]);// 0
4)Array.IndexOf() 查找元素索引

找到返回索引,找不到返回-1

int[]arr={2,4,6};intindex=Array.IndexOf(arr,4);Console.WriteLine(index);// 1

五、值类型 & 引用类型 数组内存简析(面试常考)

  1. 数组本身是引用类型,变量名存的是内存地址(栈中)
  2. 数组元素:
    • 元素为int/double/bool(值类型):元素值存在堆内存
    • 元素为string/自定义类(引用类型):堆中存地址
  3. 数组赋值是地址传递,两个数组变量指向同一块内存:
int[]a={1,2,3};int[]b=a;// b 和 a 指向同一个数组b[0]=99;Console.WriteLine(a[0]);// 99 (a 也被修改)

六、易错点总结(笔记重点标记)

  1. 索引从0开始,严防索引越界
  2. 数组长度定义后不可更改,如需动态扩容用List<T>
  3. foreach只能读取,不能修改数组元素
  4. int[,]int[][]语法、结构完全不同,不要混用
  5. 数组直接赋值属于引用传递,不是值拷贝

七、课后练习(自测)

  1. 定义一个字符串数组,存储 5 个姓名,遍历输出
  2. 定义二维数组 3行2列,赋值并嵌套循环遍历
  3. 对一个乱序 int 数组排序、反转并输出

http://www.gsyq.cn/news/1532147.html

相关文章:

  • Universal Control Remapper:5分钟打造你的专属游戏控制方案
  • 教培机构小程序如何制作开发?教你零基础上手
  • 【第七期】漏洞攻防-前端篇:XSS 与 CSRF —— 当浏览器成为攻击者的“肉鸡”
  • 2026年一键生成论文工具对比实测:5款神器从初稿到定稿全周期护航
  • 广州配眼镜去哪好?避坑精简指南 - 配眼镜新资讯
  • 细胞核荧光定量分析:从Z-stack图像到可靠GFP强度值的Python全流程
  • 贝叶斯缺失机制分析:从MNAR识别到Ignorability判断
  • 一周深度学习实战课:知识压缩与认知锚点教学法
  • 5分钟极速上手:用Open-Lyrics智能生成精准字幕文件
  • 青岛配眼镜去哪好:三个常见误区和正确做法 - 配眼镜新资讯
  • we-cropper:微信小程序Canvas图片裁剪的技术实现与架构解析
  • 【CANdelaStudio-从入门到深入到实战】18 诊断会话管理:会话切换是如何成为ECU的“交通警察”的?
  • 深入解析MSC8251 DMA控制器:链表与链接描述符机制详解
  • 开源网盘直链解析工具LinkSwift:九大平台高效下载的完整解决方案
  • eino v0.9.7:修复 Agentic ReAct 路径中的模型失败切换失效问题,Typed Agent 终于在带工具场景下正确生效
  • MPC8533E嵌入式开发实战:PIC中断控制器与I2C总线驱动详解
  • 深度解析:如何利用AI语音克隆技术创作专业级翻唱
  • 洞察2026年当前石家庄市场,聚焦五家评价高的极简轻奢门实力厂家 - 品牌鉴赏官2026
  • 【TEE从入门到精通及实战】13 SGX Quote深度解析:从字节流到信任链的完整拆解
  • 杭州配眼镜去哪好:五种用眼场景对应五款镜片方案 - 配眼镜新资讯
  • LeetCode--216.组合总和III(回溯算法)
  • 2026有孵化器国际EMBA客观测评:理性择校选型指南
  • ASTM D4169-23E1分配周期DC4运输包装试验
  • 长沙配眼镜多少钱?锁定功能性镜片高性价比方案 - 配眼镜新资讯
  • AlienFX Tools:重新定义Alienware设备控制的轻量级开源方案
  • 完全二叉树与堆底层原理深度剖析 | 手写C++大顶堆实现
  • 自幂数(水仙花数)的趣味探索:用Python和C++分别实现,并聊聊背后的数学故事
  • 2026年宜春市CPPM考试最新全攻略:科目题型、通过率、备考重点及官方双认证报考机构推荐 - 众智商学院课程中心
  • 别再只用admin/123456了!一份给运维和开发者的企业常见系统默认密码自查清单(附绿盟、深信服等设备清单)
  • Volga按需计算层:为AI推理打造请求驱动的实时特征计算中枢