当前位置: 首页 > 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.cnnetsun.cn/news/2938962.html

相关文章:

  • 酒店预订数据的探索性分析实战:EDA与可视化深度指南
  • MPC8533E嵌入式开发实战:PIC中断控制器与I2C总线驱动详解
  • 本地素材管理工具的技术架构启示:从Eagle的插件系统到AI能力的边缘集成
  • 终极免费方案:3分钟将Windows电脑变成专业无线共享中心
  • AI时代未来急需的四个岗位
  • NSK滚珠丝杠RNFTL1404A3.5S技术规格手册
  • 用目标传播训练硬激活神经网络:原理与PyTorch实操
  • 【Java零基础30天挑战·Day9】Java三大修饰符:public、private、protected,一文彻底搞懂访问控制
  • 如何构建抖音直播数据采集系统:开源工具深度解析与应用实践
  • 2026有孵化器EMBA中立测评:理性选型避坑指南
  • 【图像加密】基于matlab无限变换和闭环控制扩散的图像加密算法加密彩色图像【含Matlab源码 15631期】
  • Nucleus Co-Op终极指南:一台电脑实现4人分屏游戏的完整解决方案
  • GTA5线上小助手:你的洛圣都终极效率提升指南
  • GZDOOM联机模组避坑指南:如何快速判断你的WAD/PK3文件能不能多人玩
  • NXP EdgeLock Enclave HSM API实战:安全数据存储与设备认证详解
  • 2026年实测10款降AI率网站推荐:免费与付费全对比,毕业论文淡化AIGC痕迹必看
  • Parsec VDD虚拟显示器终极指南:如何免费扩展Windows显示系统
  • 别再只盯着UI了!聊聊HCI领域里那些容易被忽略的宝藏岗位(附技能树)
  • MPC866 PowerPC异常处理与缓存管理:原理、实践与优化
  • MPC866 SCC串行通信控制器:架构、寄存器配置与缓冲区管理实战
  • 如何快速免费打造你的专属Markdown编辑体验:Typora橙心主题终极指南
  • 【图像加密】无限变换和闭环控制扩散的图像加密算法加密彩色图像【含Matlab源码 15631期】
  • GIS工程师的遥感+机器学习实战路径:从数据物理层到端到端部署
  • Kimi K2.6快速 LeetCode 3260. 找出最大的 N 位 K 回文数 Rust实现
  • 影刀RPA进阶教程_定时任务的正确配置姿势单次循环多任务与故障恢复
  • 深入解析PXD10电源管理模式:从基础原理到低功耗设计实践
  • 三步掌握lilToon卡通渲染的终极实战指南
  • 跨境多账号新环境从零搭建完整配置指南
  • 如何用自然语言控制电脑?UI-TARS桌面助手给你答案
  • PXD10微控制器中断调度与LCD驱动在嵌入式实时系统中的应用