前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[C#1] 8-数组

[C#1] 8-数组

作者头像
blackheart
发布2018-01-19 16:22:24
5540
发布2018-01-19 16:22:24
举报
文章被收录于专栏:blackheart的专栏blackheart的专栏

1.数组概述

声明数组:

//每个元素初始化为0,虽然数组元素是值类型,但是却是分配在托管堆中的;
int[] myArray=new int[100];
//每个元素初始化为null;
Object[] mytype=new Object[100];
//myArray和mytype变量存储的是指向数组的引用,而非数组本身;

CLS要求所有数组都是0基数组。最小索引是0,性能最好的数组,微软为它们优化性能方面做了很多工作。 例如有些特殊的IL指令:newarr、ldelem等等,但是CLS也支持非0基数组。 CLR支持交错数组,但是交错数组不兼容CLS[CLS不允许一个数组的元素是System.Array]。 但是仍然可以在两个都支持交错数组的语言之间传递】。

2.System.Array[所有数组的基类]

此类实现了 ICloneable, IList, ICollection, IEnumerable接口,常用成员如下:

成员

类型

描述

Rank

只读实例属性

返回数组维数

GetLength

实例方法

返回指定维数的元素个数

Length

只读实例属性

返回所有元素的个数

Sort

静态方法

排序[元素必须实现了IComparer接口]

BinarySearch

静态方法

用二分搜索法查找元素,该方法假定数组已排序元素必须实现IComparer接口,通常先调用Sort排序在调用此方法

Reverse

静态方法

反转数组元素[整体或者部分]

Clone

实例方法

返回新创建的数组[源数组的一个浅拷贝]

CopyTo

实例方法

将数组中的元素拷贝到另一个数组中

Copy

静态方法

将一个数组的元素拷贝到另一个数组中,并根据需要执行适当的转型

Clear

静态方法

将数组中部分元素设为0或null

CreateInstance

静态方法

创建一个数组实例。它允许我们在运行时定义任何类型、任何维数、任何上下限的数组。一般不常用

GetLowerBound

实例方法

返回指定维数的下限,一般为0.不常用

GetUpperBound

实例方法

返回指定维数的下限,一般为指定维的元素个数减1.不常用

创建非0下限的数组

//每一维数组的下限
int[] lowerBound = { 2011, 3 };
//对应每一维的元素个数
int[] lengths = { 10, 7 };
//第一维索引下限是2011,元素个数是10:第二维索引下限是3,元素个数是7的二维数组
int[,] my = (int[,])Array.CreateInstance(typeof(int), lengths, lowerBound);
//返回第一维的索引下限《2011》
Console.WriteLine(my.GetLowerBound(0));
//返回第二维的索引下限《3》
Console.WriteLine(my.GetLowerBound(1));

3.快速数组访问[指针]

当我们访问一个数组中的元素时,CLR会确保索引不会超出上下限。否则会抛出System.IndexOutOfRangeException。CLR索引检查会有一些性能方面的代价。如果对自己的代码有足够的信心,并且不介意使用非安全的代码,则可以让CLR不执行检查,代码如下:

//使用 /unsafe 开关编译或者在项目》生成》勾选允许不安全的代码
unsafe static void Main()
{
    int[] my = { 1,3,5,7,9};
    //获取指向第0个元素的指针
    fixed (int* element = &my[0])
    {
        //遍历每一个元素
        for (int i = 0; i < my.Length; i++)
        {
            Console.WriteLine(element[i]);
        }
    }
}

类型安全的版本中用ldelem指令加载值[正是它导致CLR执行索引检查];非安全版本中使用ldind.4直接从内存中获取4字节的数值,不执行索引检查。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-03-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.数组概述
  • 2.System.Array[所有数组的基类]
  • 3.快速数组访问[指针]
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档