C#可否对内存进行直接的操作?

匿名网友 匿名网友 发布于: 2015-08-30 00:00:00
阅读 100 收藏 0 点赞 0 评论 0

C#可以直接对内存进行操作。但是默认情况下,为了保持类型安全,C#不支持指针运算。不过,通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文。在不安全的上下文中,类型可以是指针类型以及值类型或引用类型。指针类型声明具有下列形式之一:
unmanaged type* identifier;
void* identifier;

参数说明:

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

identifier
指针变量名称。

指针类型不继承 object,并且指针类型与 object 之间不存在转换。此外,装箱和取消装箱不支持指针。但是,允许在不同指针类型之间以及指针类型与整型之间进行转换。

当在同一个声明中声明多个指针时,* 仅与基础类型一起使用,而不是作为每个指针名称的前缀。例如:
int* p1, p2, p3;   // Ok
int *p1, *p2, *p3;   // Invalid in C#

因为垃圾回收器不知道关于指针的任何信息,指针不能指向引用或包含引用的结构,但知道关于引用的信息。

myType* 类型的指针变量的值是 myType 类型的变量的地址。
下面是指针类型声明的示例:
示例  说明
int* p  p 是指向整数的指针

int** p  p 是指向整数的指针的指针

int*[] p  p 是指向整数的指针的一维数组

char* p  p 是指向字符的指针

void* p  p 是指向未知类型的指针

因为C#为了提高安全型,默认是运行在托管代码下的,在我们正常的企业mis开发中很少会有用到非托管代码的情况,致使大部分c#初学者误以为C#不能直接操作内存。当然,面试时很少会有人问起这个,这个我们只需要做简单的了解就可以了,如果不是开发的需要,没有必要深究。

评论列表
文章目录