多语言展示
当前在线:1961今日阅读:103今日分享:49

C# 二维数组可否使用指针

首先告诉你,C#为了类型安全,默认并不支持指针用法。但是也并不是说C#不支持指针,可以使用unsafe关键词,开启不安全代码(unsafe code)开发模式。在不安全模式下,我们可以直接操作内存,这样就可以使用指针了。在不安全模式下,CLR并不检测unsafe代码的安全,而是直接执行代码。unsafe代码的安全需要开发人员自行检测。下边会介绍指针用法,但建议二维数组不用指针来操作,直接用方法。1.引用类型不能定义为指针 2.msdn上说enum可以定义为指针,可是我真不知道它的用处是什么。所以在指针的类型中并没有出现enum类型。 3.c#中的指针操作远远不如c/c++,如果想学习指针的话,还是用c/c++ 4.微软并不推荐使用unsafe code模式,也不推荐使用指针。在msdn官方文档中,唯一一句赞美C#指针的话就是“合理的使用指针,可以提高程序的执行速度”。但是什么是“合理的使用”?我下载了msdn上的几个关于C#指针的实例代码,发现用的最多的是调用api函数,在api函数中,有大量的指针参数。 5.fixed的使用可能产生存储碎片,因为它们不能移动。如果确实需要固定对象,固定对象的时间应该越短越好。 6.可以使我们了解非托管类型的内存分配。
方法/步骤
1

C#可以定义为指针的类型有:sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, struct(结构体),结构体中只能包括非托管类型。C#指针操作符:* 取值运算符& 取址运算符-> 通过指针处理结构体中的数据(获取或赋值)++与– 指针增、减操作fixed 用户暂时固定托管代码中引用类型的位置。Stackallc 分配内存

2

C#可以定义为指针的类型有:sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, struct(结构体),结构体中只能包括非托管类型。

3

C#指针的定义:定义指针说明int* p整形指针int** p指向整形指针的指针char* c指向字符的指针int*[] arr整形一维数组指针

4

C#定义一维二维数组的方式如下:using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            //一维数组定义与初始化            int[] one1 = new int[] {3,2,1 };//第一种方式            int[] one2 = { 3, 2, 1 };      //第二种方式            int[] one3;                    //第三种方式            one3=new int[]{3,2,1};              //二维数组定义与初始化             //不规则二维数组            int[][] array = new int[2][];            array[0] = new int[3];            array[0][1] = 11;            array[0][2] = 12;            array[1] = new int[] { 1, 2, 3, 4,5 };             //或int[][] array = new int[2][] { new int[] {0,11,12 }, new int[] {1,2,3,4,5 }};                      Console.WriteLine( '不规则二维数组:  ');            for (int i = 0; i < array.Length; i++)            {                foreach (int j in array[i])                {                    Console.Write(j+'   ');                }                Console.WriteLine();            }             //固定长度的矩阵数组            int[,] arrray1=new int[2,5]{{9,9,9,9,0},{0,0,9,0,0}};            Console.WriteLine('规则二维数组输出方法一:  ');            for (int ii = 0; ii < 2; ii++)                        //输出方法一            {                for (int j = 0; j < 5; j++)                {                    Console.Write(arrray1[ii,j] + '   ');                }                Console.WriteLine();            }            Console.WriteLine('规则二维数组输出方法二:  ');            foreach (int j in arrray1)//arrray.length=10;      //输出方法二            {                Console.Write(j + '   ');            }            Console.WriteLine();            Console.ReadLine();        }    }}

推荐信息