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

C# 图解教程 第5版 —— 第13章 数组

文章目录

    • 13.1 数组
      • 13.1.1 定义
      • 13.1.2 重要细节
    • 13.2 数组的类型
    • 13.3 数组是对象
    • 13.4 一维数组和矩形数组
    • 13.5 实例化一维数组或矩形数组
    • 13.6 访问数组元素(*)
    • 13.7 初始化数组
      • 13.7.1 显示初始化一维数组
      • 13.7.2 显示初始化矩形数组
      • 13.7.3 初始化矩形数组的语法点(*)
      • 13.7.4 快捷语法
      • 13.7.5 隐式类型数组
      • 13.7.6 综合内容(*)
    • 13.8 交错数组
      • 13.8.1 声明交错数组
      • 13.8.2 快捷实例化
      • 13.8.3 实例化交错数组
      • 13.8.4 交错数组中的子数组(*)
    • 13.9 比较矩形数组和交错数组
    • 13.10 foreach 语句
      • 13.10.1 迭代变量是只读的
      • 13.10.2 foreach 语句和多维数组
    • 13.11 数组协变
    • 13.12 数组继承的有用成员
    • 13.13 比较数组类型
    • 13.14 数组与 ref 返回和 ref 局部变量

13.1 数组

13.1.1 定义

  • 元素:数组的独立数据项。
  • 秩/维度:数组的维度数称作秩。
  • 维度长度:每个维度方向的位置个数。
  • 数组长度:所有维度中的元素总数。

13.1.2 重要细节

  • 数组一旦创建就固定了。C# 不支持动态数组。
  • 数组索引号从 0 开始。

13.2 数组的类型

​ C# 提供以下两种类型的数组:

  1. 一维数组。

  2. 多维数组。

    • 矩形数组。

      • 某个维度的所有子数组长度相同。
      • 仅使用一组方括号表示。
    • 交错数组。

      • 每个子数组都是独立的。
      • 可以有不同长度的子数组。
      • 每一个维度使用一个方括号表示。
image-20231028233858258
图13.1 一维数组、矩形数组及交错数组

13.3 数组是对象

​ 数组是继承了 System.Array 类型的对象,具有 BCL 基类中很多有用的成员:

  • Rank:属性,返回数组的维度。
  • Length:属性,返回数组的长度。
image-20231028234121805
图13.2 数组的结构

13.4 一维数组和矩形数组

声明一维数组或多维数组

​ 在类型和变量名称之间使用方括号声明数组,方括号内的逗号是秩说明符,指定了数组的维度数:秩 = 逗号数 + 1。

  • 可以有任意多个秩说明符(逗号)。
  • 不能在数组类型区域中放数组维度长度(维度长度不是类型的一部分)。
  • 数组声明后,维度就固定了。而维度长度直到数组实例化时才决定。
image-20231028234602373
图13.3 数组的声明

13.5 实例化一维数组或矩形数组

​ 使用 new 运算符实例化:

image-20231028235251526 image-20231028235303201 image-20231028235316531
图13.4 声明和实例化数组

13.6 访问数组元素(*)

13.7 初始化数组

​ 数组被创建后,每个元素被自动初始化为类型的默认值。

  • 整型:0。
  • 浮点型:0.0。
  • 布尔型:false。
  • 引用类型:null。

13.7.1 显示初始化一维数组

​ 使用初始化列表进行初始化:

  • 初始值以逗号分隔,封闭在大括号内。
  • 不必输入维度长度,编译器可以进行推断。
image-20231028235950901
图13.5 一维数组的显示初始化

13.7.2 显示初始化矩形数组

  • 每个初始值向量必须封闭在大括号内。
  • 每个维度必须嵌套并封闭在大括号内。
  • 每个维度的初始化列表和组成部分也使用逗号分隔。
image-20231029000205626
图13.6 初始化矩形数组

13.7.3 初始化矩形数组的语法点(*)

13.7.4 快捷语法

​ 可以省略语法的数组创建表达式部分,只提供初始化部分:

image-20231029000836345
图13.7 声明、创建以及初始化数组的快捷语法

13.7.5 隐式类型数组

​ 由于智能的编译器,可以使用 var 关键字进一步简化声明隐式数组:

image-20231029001138210
图13.8 使用 var 声明隐式类型数组

13.7.6 综合内容(*)

13.8 交错数组

13.8.1 声明交错数组

  • 和矩形数组一样,数组类型声明部分不能包含维度长度。
image-20231029001527294
图13.9 声明交错数组

13.8.2 快捷实例化

​ 可以快捷创建顶层数组的声明:

image-20231029001753063 image-20231029001807546 image-20231029001819337
图13.10 快捷最高级别实例化

13.8.3 实例化交错数组

​ 交错数组的初始化不能在一个步骤中完成,需要以下步骤:

  1. 实例化顶层数组。
  2. 分别实例化每一个子数组。
image-20231029002021158
图13.11 创建二维交错数组

13.8.4 交错数组中的子数组(*)

13.9 比较矩形数组和交错数组

​ 图 13.12 展示了保存 9 个整数的矩形数组和交错数组。矩形数组只有单个数组对象,而交错数组有 4 个数组对象。

image-20231029234022522
图13.12 比较矩形数组和交错数组的结构

​ CIL 中,一维数组有特定的性能优化指令,而矩形数组没有。因此,有时使用一维数组的交错数组比矩形数组更高效。

13.10 foreach 语句

13.10.1 迭代变量是只读的

  • 对于值类型数组,不能改变数组元素。
  • 对于引用类型数组,不能改变引用,可以通过迭代变量改变数据。

13.10.2 foreach 语句和多维数组

  1. 矩形数组

    维度处理次序为从右向左,每个维度从 0 开始递增。递增满时,重置为 0,左方维度索引递增。

  2. 交错数组

    必须为每一个维度使用独立的 foreach 语句。

13.11 数组协变

​ **数组协变:**即使某个对象不是数组的基类型,也可以把它赋值给数组元素。发生的条件如下:

  • 为引用类型数组。
  • 在复制对象和数组基类型之间有隐式或显示转换。
image-20231029235139038 image-20231029235212543 image-20231029235229032
图13.13 数组出现协变

13.12 数组继承的有用成员

表13.1 数组继承的一些有用成员
image-20231029235310161

13.13 比较数组类型

表13.2 比较数组类型的总结
image-20231029235426636

13.14 数组与 ref 返回和 ref 局部变量

image-20231029235615041
图13.14 数组 ref 返回与局部变量示例

相关文章:

  • HTTPS协议:保障网络安全的加密通信协议
  • vue 路由懒加载,图片懒加载,组件懒加载
  • Steger算法实现结构光光条中心提取(python版本)
  • 2023.10.28 关于 synchronized 原理
  • Ubuntu编译 PCL 1.13.1 详细流程
  • 嵌入式系统>嵌入式硬件知识
  • OpenText 安全取证软件——降低成本和风险的同时,简化电子取证流程
  • gradle多模块依赖管理最佳实践
  • 基于STM32的示波器信号发生器设计
  • 软考 系统架构设计师系列知识点之设计模式(6)
  • 阿里云/腾讯云国际站代理:阿里云服务器介绍
  • Docker:数据卷挂载
  • 「实验记录」CS144 Lab0 networking warmup
  • 永恒之蓝漏洞 ms17_010 详解
  • uniapp开发小程序—根据生日日期计算年龄 周岁
  • Web入门笔记
  • iOS iGameGuardian修改器检测方案
  • JDBC与MySql数据库
  • 软考下午第一题 案列分析
  • 大数据Flink(一百零三):SQL 表值聚合函数(Table Aggregate Function)
  • 域名空间网站怎么做/客服网站搭建
  • 网站怎么做才不会被封/百度top排行榜
  • 淄博企业网站建设/精准客户截流软件
  • 专业的营销型网站/seo权重优化
  • 介绍几个有趣的网站/武汉大学人民医院院长
  • 找网络公司做网站/百度手机助手app下载