.net----数组和指针

前言

  • 数组
    声明、实例化、初始化和访问;
    数组的基本操作和排序;
    System.Array类

  • C#的指针和不安全代码

数组

  • 数组是一种数据结构,它包含相同类型的一组数据

int[] A;
A = new int[3];//简单的一维数组

  • 数组必须先声明:

  • 类型名称[] 数组名;

  • 数组在声明后必须实例化才能使用:

  • 数组名称 = new 类型名称[数组长度];

一条语句完成声明与实例化

int[] A = new int[3];
类型名称[] 数组名称 = new 类型名称[数组长度];

实例化时,可以为数组元素指定初始化值

int[] A = new int[3] {1,3,5};
数组名称 = new 类型名称[数组长度] {初始值设定项};

int[] A = new int[] {1,3,5};
int[] A = {1,3,5};
int[] A; A = {1,3,5};
int[] A = new int[3];
A[0] = 1;
A[1] = 3;
A[2] = 5; 

数组的维度(秩)

int[] A = new int[3];//一维数组
int[,] A = new int[4, 2];//二维数组
int[, ,] A = new int[3, 5, 2];//三维数组
…….
int[,…,] A = new int[3, 5, … , 2];//n维数组

  • 数组下标(索引)从0开始
  • 数组元素可以为任何数据类型,包括数组类型
  • 数值数组元素的默认值设置为0,而引用元素的默认值设置为 null
  • 交错数组是数组的数组,它的元素是引用类型,初始化为 null
  • 数组中的元素总数是数组中各维度长度的乘积
  • 通过.NET框架中的System.Array类来支持数组

一维数组

int[] mark= new int[100];       //声明有100个整数的数组
Random rNum = new Random();  //生成随机数
int i,sumMark=0,avgMark,overAvg=0;
for (i = 0; i < 100; i++)
      {
          mark[i] = rNum.Next(101); //随机生成学生成绩(0~100)
          sumMark += mark[i];     //统计成绩总和
       }
avgMark = sumMark / 100;  //求平均成绩
for (i = 0; i < 100; i++)     //统计高于平均成绩的学生人数
     {
        if (mark[i] > avgMark) overAvg++;
     }
for (i = 0; i < 100; i++)
 {
        if (mark[i] > avgMark) overAvg++;
 }

C#语言还可以通过foreach语句来枚举数组的各个元素

foreach (int mm in mark)
 {
        if (mm> avgMark) overAvg++;
 }

交错数组——数组的数组

元素为数组的数组,元素的维度和大小可以不同
正交数组、变长数组、锯齿形数组

int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];
int[][,] jaggedArray = new int[3][];
{
    new int[,] = {{1,3},{5,7}};
    new int[,] = {{0,2},{4,6},{8,10}};
    new int[,] = {{11,22},{99,88},{0,9}};
}

数组的基本操作和排序

  • 数组求和、求平均值、最值及其位置
  • 数组的排序,如冒泡法、选择法
  • 插入数据到已排序的数组中;删除已排序的数组中某一元素

选择排序:

            int N = A.Length; //获取数组A的长度N
            for (int loop = 0; loop <= N - 2; loop++)//外循环进行N-1轮比较
            {
                MinI = loop;
                for (i = loop; i <= N - 1; i++)    //内循环中在无序数中找最小值
                    if (A[i] < A[MinI]) MinI = i;
                //最小值与无序数中的第一个元素交换
                t = A[loop];
                A[loop]=A[MinI];
                A[MinI] = t;
            }

作为对象的数组

System.Array类提供的常用方法和属性如表5-4所示

  • Array.Clear(…);
  • 源数组名.CopyTo(…);
  • Array.Copy(…);
  • 数组名.GetLength(维度);
  • 数组名.Length;
  • Array.Reverse(…);
  • Array.Sort(数组名);
  • 数组名.GetLowerBound(); 数组名.GetUpperBound();
  • 数组名.Rank;

C#的指针和不安全代码

  • 为了保持类型安全,默认情况下,C# 不支持指针

  • C#通过使用 unsafe 关键字,可以定义不安全上下文,然后在不安全上下文中使用指针

  • 在 C# 中,为了编译不安全代码,必须用/unsafe 编译应用程序

指针的声明

type* identifier;
void* identifier; // 允许但不推荐使用!

可以声明为指针类型的数据类型包括

  • sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal 或 bool
  • 任何枚举类型
  • 任何指针类型
  • 仅包含非托管类型的字段的任何用户定义的结构类型

指针的操作

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数组指针指针数组是C语言中的两个概念,它们在用法和含义上有一些区别。 数组指针是指向数组首元素地址的指针,即指向数组指针。它的定义格式为`类型 (*指针名)\[数组长度\]`。例如,`int (*p)\[2\]`表示p是一个指向长度为2的int类型数组指针数组指针可以用来访问数组中的元素,可以通过指针加上偏移量来访问数组中的特定元素。 指针数组是一个数组,其中的每个元素都是指针。它的定义格式为`类型 *指针数组名\[数组长度\]`。例如,`int *p\[3\]`表示p是一个长度为3的指针数组,每个元素都是int类型的指针指针数组可以用来存储多个指针,每个指针可以指向不同的变量或数据。 总结一下,数组指针是指向数组指针,而指针数组是一个数组,其中的每个元素都是指针数组指针可以用来访问数组中的元素,而指针数组可以用来存储多个指针。它们在用法和含义上有一些区别。 #### 引用[.reference_title] - *1* [数组指针指针数组的区别](https://blog.csdn.net/EgBerT0o0/article/details/127031205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【C语言】数组指针指针数组的用法、区别](https://blog.csdn.net/cw616729/article/details/107123241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C语言学习—数组指针指针数组的区别](https://blog.csdn.net/qq_41884147/article/details/121572360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉卧考场君莫笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值