首页 > 代码库 > c#指针
c#指针
<1>为什么要使用指针?
一是向后兼容性:c#非常擅长对开发人员隐藏大部分基本内存管理,因为它使用了垃圾回收器和引用,但是有时需要直接访问内存,例如由于性能问题,需要在外部(非.net环境)的DLL中访问一个函数,该函数需要把指针当作参数来传递(许多windows API函数就是这个样子);二是性能:在一些情况下,速度是最重要的,而指针可以提供最优性能;
<2>其实引用就相当于一个类型安全的指针,指针只是以一个与引用相同的方式存储地址的变量,其区别是c#不允许直接访问在引用变量中包含的地址;要使用关键字unsafe特别标记的代码块才能使用指针,任何方法都可以标记为unsafe的,成员变量也可以标记为unsafe,也可以把方法中的一块代码标记为unsafe;
<3>指针的语法:
指针的语法基本上和c语言c++的一样,注意不能创建指向任何一个引用类型的指针,因为垃圾回收器只会维护关于引用的信息,不会维护关于指针的任何信息,因此创建指向类的指针会使垃圾回收器不能正常工作;但是可以创建指向类成员的指针,要使用fixed关键字
Myclass myObject=new Myclass(); fixed(long* pObject=&(myObject.x)) { //do something }
<4>指针的另一个应用领域是创建高性能,低系统开销的数组因为c#数组实际上都是一个对象,它们是System.Array的实例,因此数组存储到堆上,占用了系统的开销,有时我们希望创建一个使用时间比较短的高性能数组,不希望有引用对象的系统开销,这时可以使用指针来创建;需要使用stackalloc关键字;但是要注意一点
double* pDoubles=stackalloc double[20]; pDoubles[50]=3.0;
这时采用越界的下标来访问数组,不会抛出异常,可能会改变有用的信息;
c#指针
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。