当前位置: 首页 > 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.jsqmd.com/news/1020301/

相关文章:

  • 量子神经网络与生成电路的技术突破与应用
  • LangGraph 基础:Node、Edge、State 是什么?
  • 用ChatGPT重构数据科学学习路径:问题驱动的认知脚手架
  • 教培机构小程序如何制作开发?教你零基础上手
  • 金融行业学数据分析的价值
  • 北京配眼镜多少钱?瞳壤五款功能性镜片一目了然 - 配眼镜新资讯
  • MSC8251多核DSP调试实战:JTAG与OCE模块深度解析
  • SolidWorks第四部分_直接实体建模特征3_分割特征应用
  • 【第七期】漏洞攻防-前端篇:XSS 与 CSRF —— 当浏览器成为攻击者的“肉鸡”
  • 5个步骤掌握低代码数据处理:Awesome-Dify-Workflow的AI辅助数据分析终极指南
  • 2026市场营销岗位学数据分析的技术价值
  • 嵌入式MCU芯片选择机制:从地址解码到中断响应的实战解析
  • 2026年6月《剑与翼》正版下载安装完整指南:三端适配调试与新手稳定开荒手册一、文章概述
  • ​6月16日晚上19:00直播丨Ascend C开源资料及样例分享
  • 微信海量聊天记录怎么存?聊聊后端流水的数据库分库分表与归档设计
  • 从固定周期到动态触发:超自动化巡检的智能调度
  • LSTM为何比RNN更适用于工业级时序建模
  • `pdfplumber` 是一个用于从 PDF 文件中提取文本、表格和元数据的 Python 库
  • 二次供水泵房多中心数据上报到企业、部门等平台的方案
  • 北京配眼镜去哪好?五种日常场景匹配五种镜片方案 - 配眼镜新资讯
  • 蓝牙产品:蓝牙信标 (BLE Beacon) 深度调研
  • 开短路测试(Open/Short Test)原理
  • 5个生产级Jupyter扩展构建可审计Notebook工作流
  • 2026年一键生成论文工具对比实测:5款神器从初稿到定稿全周期护航
  • 终极指南:如何在5分钟内完成MelonLoader Unity游戏Mod加载器安装
  • 广州配眼镜去哪好?避坑精简指南 - 配眼镜新资讯
  • 细胞核荧光定量分析:从Z-stack图像到可靠GFP强度值的Python全流程
  • 用目标传播训练硬激活神经网络:原理与PyTorch实操
  • Zotero Style插件:终极文献管理效率提升70%的完整指南
  • MSC711x定时器PWM与级联配置实战:从寄存器到波形生成