C#可否对内存进行直接的操作
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#不能直接操作内存。当然,面试时很少会有人问起这个,这个我们只需要做简单的了解就可以了,如果不是开发的需要,没有必要深究。
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#不能直接操作内存。当然,面试时很少会有人问起这个,这个我们只需要做简单的了解就可以了,如果不是开发的需要,没有必要深究。
【C#可否对内存进行直接的操作】相关文章
7. 什么是Smarty变量操作符?如何使用Smarty变量操作符
9. 什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
10. 什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
本文来源:https://www.mianshiwenti.com/a12973.html
进入下载页面
上一篇:C#中类(class)与结构(struct)的异同
下一篇:C#中的验证控件有几种
﹝C#可否对内存进行直接的操作﹞相关内容
- Ruby如何进行文件操作
- 农民工工作受伤直接向谁主张索赔?
- 直接有效的自我评价
- EJB需直接实现它的业务接口或Home接口吗,请简述理由
- 在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
- 如何减少垃圾回收让内存更加有效使用
- Java中会存在内存泄漏吗,请简单描述
- 描述内存分配方式以及它们的区别
- 为什么会有内存对齐
- 请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值