百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

C# - 初识数组 033

liuian 2025-08-01 18:40 21 浏览

数组:是引用类型的数据结构;是一个存储同一数据类型元素有固定大小有顺序的集合;复杂数据类型的一种

数组的语法格式

//方式1
数据类型[] 数组名 = new 数据类型[数组的长度];
[]表示要声明的是一个数组//这里不是省略的意思
数据名:就是为数组起一个要求符合变量的命名规则的名字
new 数据类型[数据的长度] 表示在内存中开辟的数组长度
//声明数组时一定是可以表示正整数长度的数据如
//整形数字int,byte,或者可以转换为数组下标范围正整数的其他类型肉"0"等
//长度必须有,即使长度为0
//如 int[] nums = new int[0];开辟长度为0的数组
new 后面的数据类型必须与[]前面的类型一致
因为 数组声明时不存在隐式或显示类型转换
//int[] nums=new float[0]; //因此 此数组格式声明错误 
//==============================
int[] numbers = new int[10];
表示在内存开辟了10个可以存储int类型的空间
这一组空间的名称叫 numbers
数组中的numbers[下标]被称之为数组的一个变量
数组中的每个变量又被称之为 元素
可以通过下标或索引器访问数组的元素
第一个元素的下标是0,最后一个元素的下标是9,也就是:数组的长度-1
通过访问下标可以对每个元素进行赋值,修改与使用
numbers[9]=10;
为数组的元素numbers[9]赋值为10
//声明一个类型为int 名称为numbers 长度为10的 数组
int[] numbers = new int[10];
//通过下标为具体元素赋值
numbers[0] = 1;
numbers[9] = 10;
//打印输出数组元素
Console.WriteLine("numbers[9]={0}", numbers[9]);
//通过下标修改具体元素的值
numbers[9] = 100;//修改下标为9的元素其值变为100
//打印输出数组元素
Console.WriteLine("numbers[0]={0}", numbers[0]);
Console.WriteLine("numbers[9]={0}", numbers[9]);
Console.ReadKey();

数组名称,数组元素与元素的值在内存中的表现形式与关系

数组元素的赋值范围与数组的类型有关,与数组的长度无关

byte[] nums = new byte[258];
//byte类型的范围为0-255 
//声明数组长度 设置为258不会报错
//赋值/使用时不报错的情况
nums[258]=3;//与数组长度无关,即使声明数组长度为999999999
//赋值/使用时报错的情况
//超出byte的范围
nums[0]=256;//与赋值范围有关 
//=================================
//不建议这么做  没意义
byte[] nums = new byte[999999];

byte数组常用于如文件流等

数组的注意事项

1 声明什么类型的数组,数组中只能存储什么类型范围内(数组类)的数据; 如int类型的数组,其元素值只能赋值int类型,不能为其赋值其他类型的数据(除非可以转换为int类型)

由图中(行号33)可以看出只能赋值显示(强制)类型转换的数据,不能赋值隐式类型转换的数据

2 各个类型的元素都有自己类型的默认值

数组元素的默认值就是基本数据类型各自的默认值;单个使用的规则:声明一>赋值一>使用,必须赋初始值;基本数据类型放置在复杂数据类型中可以不必赋初始值

//单个使用
int num=6;//必须赋初始值后才能使用

复杂类型:1)枚举就是一个枚举成员的第一个(底层就是int类型,本例中) 2)结构与数组就是自己成员变量各个的类型的默认值

 class Program
 {
     enum MyEnum
        {
            男, 女
        }
     struct MyStruct
        {
            public string name;
            public int age;
        }
     static void Main(string[] args)
     {
         //基本数据类型的默认值
         int[] numbers = new int[1];//代表整形数值的与decimal类型 默认值为0
         float[] fs = new float[1];//代表float,double 默认值为0.0
         string[] s = new string[1];//代表string与object 默认值为null 
         char[] cs = new char[1];//默认值为0或ASCII码表的第一个
         bool[] bs = new bool[1];//默认值为false
         //复杂类型的默认值
         MyEnum Gender;
         MyStruct Info;
        MyEnum[] gs = new MyEnum[3];//枚举类型数组
        Student[] stus = new Student[3];//结构类型数组
     }
}

3 声明数组时必须确定数组的长度,长度一旦确定不可改变

上面数组的变形格式

//正确的格式
int[] nums2;//声明数组类型的变量
nums=new int[9];//比较常用
//错误的格式
int[] nums2=new nums;
nums[9];

必须确定数组的长度:

1)声明数组时要确定该数组需要在内存中开辟多大的空间

2)数组在内存中开辟的是连续的一段存储空间

数组没有添加/删除元素的方法,因此长度无法改变;可以通过两个数组实现另一种意义的改变数组长度(了解即可)

//假设不想要某些数据
int[] nums1 = new int[5];
//只需要下标为0,2,4的数据有3个元素
int[] nums2 = new int[3];
//将需要的数据存储在新数组中
nums2[0]=nums1[0];
nums2[1]=nums1[2];
nums2[2]=nums1[4];

4 使用下标访问元素时,下标也可以使用变量(必须在数组下标的范围内)

5 使用数组常见错误

1 数组元素所赋的值超出数组类型的范围,编程时VS会有提示,通过输入语句就会报错

2 赋值,访问时下标超出数组长度的范围

声明时的数字[255]表示数组长度是255,下标是0-254(长度-1)

另两种声明方式(了解即可)

//方式2 以元素个数定数组长度
//声明一个长度为3的数组
//等号右面一个大括号,括号中间每个元素用逗号隔开
//[]前面是什么类型,{}里面就必须使用什么类型的表示方式书写元素
//书写几个元素表示该数组长度就是多少
int[] nums={1,2,3};
string[] names={"zs","ls","ww"};//字符串数组 元素加双引号
//声明了有5个元素的char类型数组
char[] cs={'a','b','c','d','e'};//字符数组 元素加单引号
//其他类型以此类推
//=======================================
//方式3 声明时就给元素赋值初始化元素的值
//{ }在类或集合初始化时最常见
//类似的语法一般称为语法糖
//作用:简化编写代码
int[] nums=new int[]{1,2,3};//声明了一个长度为3的int类型数组
int[] nums=new int[3]{1,2,3};//[]中的长度可以省略
//==========================
//错误格式 []中确定了长度 但{}中元素多/少写
//编程时VS有提示
int[] nums=new int[3]{1,2};
int[] nums=new int[3]{1,2,3,5};

反编译查看3种声明方式的区别

使用数组的益处:1)相当于一次声明多个数类型相同的变量 2)数组元素在内存的存储是连续的 3)可以使用循环进行操作

相关推荐

赶紧收藏!编程python基础知识,本文给你全部整理好了

想一起学习编程Python的同学,趁我粉丝少,可以留言、私信领编程资料~Python基础入门既然学习Python,那么至少得了解下这门编程语言,知道Python代码执行过程吧。Python的历...

创建绩效改进计划 (PIP) 的6个步骤

每个经理都必须与未能达到期望的员工抗衡,也许他们的表现下降了,他们被分配了新的任务并且无法处理它们,或者他们处理了自己的任务,但他们的行为对他人造成了破坏。许多公司转向警告系统,然后在这些情况下终止。...

PI3K/AKT信号通路全解析:核心分子、上游激活与下游效应分子

PI3K/AKT/mTOR(PAM)信号通路是真核细胞中高度保守的信号转导网络,作用于促进细胞存活、生长和细胞周期进程。PAM轴上生长因子向转录因子的信号传导受到与其他多条信号通路的多重交叉相互作用的...

互联网公司要求签PIP,裁员连N+1都没了?

2021年刚画上句号,令无数互联网公司从业者闻风丧胆的绩效公布时间就到了,脉脉上已然炸了锅。阿里3.25、腾讯二星、百度四挡、美团绩效C,虽然名称五花八门,实际上都代表了差绩效。拿到差绩效,非但不能晋...

Python自动化办公应用学习笔记3—— pip工具安装

3.1pip工具安装最常用且最高效的Python第三方库安装方式是采用pip工具安装。pip是Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能。pip是Python官方提...

单片机都是相通的_单片机是串行还是并行

作为一个七年的从业者,单片机对于我个人而言它是一种可编程的器件,现在长见到的电子产品中几乎都有单片机的身影,它们是以单片机为核心,根据不同的功能需求,搭建不同的电路,从8位的单片机到32位的单片机,甚...

STM32F0单片机快速入门八 聊聊 Coolie DMA

1.苦力DMA世上本没有路,走的人多了,便成了路。世上本没有DMA,需要搬运的数据多了,便有了DMA。大多数同学应该没有在项目中用过这个东西,因为一般情况下也真不需要这个东西。在早期的单片机中...

放弃51单片机,直接学习STM32开发可能会面临的问题

学习51单片机并非仅仅是为了学习51本身,而是通过它学习一种方法,即如何仅仅依靠Datasheet和例程来学习一种新的芯片。51单片机相对较简单,是这个过程中最容易上手的选择,而AVR单片机则更为复杂...

STM32串口通信基本原理_stm32串口原理图

通信接口背景知识设备之间通信的方式一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。串行通信的分类1、按照数据传送方向,分为:单工:数据传输只支持数据在一个...

单片机的程序有多大?_单片机的程序有多大内存

之前一直很奇怪一个问题,每次写好单片机程序之后,用烧录软件进行烧录时,能看到烧录文件也就是hex的文件大小:我用的单片机芯片是STM32F103C8T6,程序储存器(flash)只有64K。从...

解析STM32单片机定时器编码器模式及其应用场景

本文将对STM32单片机定时器编码器模式进行详细解析,包括介绍不同的编码器模式、各自的优缺点以及相同点和不同点的应用场景。通过阅读本文,读者将对STM32单片机定时器编码器模式有全面的了解。一、引言...

两STM32单片机串口通讯实验_两个32单片机间串口通信

一、实验思路连接两个STM32单片机的串口引脚,单片机A进行发送,单片机B进行接收。单片机B根据接收到单片机A的指令来点亮或熄灭板载LED灯,通过实验现象来验证是否通讯成功。二、实验器材两套STM32...

基于单片机的智能考勤机设计_基于51单片机的指纹考勤机

一、设计背景随着科技水平的不断发展,在这么一个信息化的时代,智能化信息处理已是提高效率、规范管理和客观审查的最有效途径。近几年来,国内很多公司都在加强对企业人员的管理,考勤作为企业的基础管理,是公司...

STM32单片机详细教学(二):STM32系列单片机的介绍

大家好,今天给大家介绍STM32系列单片机,文章末尾附有本毕业设计的论文和源码的获取方式,可进群免费领取。前言STM32系列芯片是为要求高性能、低成本、低功耗的嵌入式应用设计的ARMCortexM...

STM32单片机的 Hard-Fault 硬件错误问题追踪与分析

有过单片机开发经验的人应该都会遇到过硬件错误(Hard-Fault)的问题,对于这样的问题,有些问题比较容易查找,有些就查找起来很麻烦,甚至可能很久都找不到问题到底是出在哪里。特别是有时候出现一次,后...