• .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; 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    数组的维度(秩)

    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++;
         }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    for (i = 0; i < 100; i++)
     {
            if (mark[i] > avgMark) overAvg++;
     }
    
    • 1
    • 2
    • 3
    • 4

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

    foreach (int mm in mark)
     {
            if (mm> avgMark) overAvg++;
     }
    
    • 1
    • 2
    • 3
    • 4

    交错数组——数组的数组

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

    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}};
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    数组的基本操作和排序

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

    选择排序

                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;
                }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    作为对象的数组

    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
    • 任何枚举类型
    • 任何指针类型
    • 仅包含非托管类型的字段的任何用户定义的结构类型

    指针的操作

    在这里插入图片描述

  • 相关阅读:
    第六季完美童模 代言人段沫如 全球赛个人风采展示
    【第四部分 | JavaScript 基础】2:运算、控制流程、数组
    春眠不觉晓,Java数据类型知多少?基础牢不牢看完本文就有数了
    nacos安装详细教程-单机、集群(nginx)
    1688拍立淘API接口分享
    前端中有序标签的使用
    【mysql】—— 复合查询
    知识增强的大语言模型
    Qt5开发从入门到精通——第十二篇二节(Qt5 事件处理及实例——多线程控制、互斥量、信号量、线程等待与唤醒)
    读书感悟【Vue.js设计与实现】第1章 权衡的艺术 【Vue进阶系列】
  • 原文地址:https://blog.csdn.net/weixin_51422230/article/details/127688943