


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指针在CC+里面可是一个好东西,但是到Java,.Net的时代指针已经被封装起来,对用户不可见,这点Java做的非常的彻底。.Net可能因为还存在一个托管C,因此指针并没有完全废除,C还是保留了指针的操作。 要使用指针首先要对使用指针的代码用unsafe进行进行声明,声明和public声明一样,可以对整个类进行声明,也可以是类里面某个方法或者属性。在代码里什么后,还需要修改工程项目的Build属性,让编译器支持指针的操作。 做好事前的工作就可以使用指针了。指针的使用方法和C下使用没有太多差别。只要编译器不报错就没有太大问题。 下面是对指针的一些使用上的理解:1 指针类型可以是实体变量(int,double)也可以是enum,同时也支持结构体变量struct。但不能是类。不过空指针可以指向类,只不过空指针不能进行任何操作,也只能把空指针作为传递对象来使用。2 C#提供一个的关键字stackalloc用于申请堆栈内存。注意,这个申请内存分配的是栈内存,当函数执行完毕后,内存会被自动回收。不过我想用这个栈内存基本可以解决40的问题,而且使用的时候不必担心内存泄漏问题。3 .Net 好像不直接支持堆内存的申请(这个对.Net来说很危险),不过我们可以通过调用win32 api 的方法进行申请。这样就可以解决剩下40%的问题。堆内存申请的方法在MSDN里面有相关的文档,具体实现代码见附1。4 结构体是一个特殊的对象。他与类的定义就差一个关键字,使用方法也和类一样,可以定义属性,可以定义方法。但是在进行指针操作的时候双方就有很大的差别了。结构体可以通过sizeof()取得大小,大小与结构体里有多少实体变量有关,但是如果struck里定义了类的对象,或者指针,sizeof可能会编译不过(void* 的空指针例外,不过需要在结构体声明处加上unsafe)。5 fixed关键字:目前了解的不多,不过有一个很实用的例子可以让指针能够和.Net里的数组进行交互操作: byte buffer = new byte100; fixed (byte* p = buffer) P0 = 123; 6 其它7 附1: public unsafe class Memory / Handle for the process heap. This handle is used in all calls to the / HeapXXX APIs in the methods below. static int ph = GetProcessHeap(); / Private instance constructor to prevent instantiation. private Memory() / Allocates a memory block of the given size. The allocated memory is / automatically initialized to zero. public static void* Alloc(int size) void* result = HeapAlloc(ph, HEAP_ZERO_MEMORY, size); if (result = null) throw new OutOfMemoryException(); return result; 很多人将C#和Java进行比较的时候,认为C#支持指针是C#的一个特点。我的个人观点认为任何事务应该一分为二的看,有利必然有弊。关于支持指针是好还是不好,不同的人有不同的看法,这个讨论很多。我们在此仅仅是讨论如何在C#中使用指针,并不是讨论它的利弊。1、修改工程配置工程中默认的配置是不支持代码的非安全性的,如果我们想使用指针就要修改这个默认的设置。否则我们在编译的时候就会出现“不安全代码只会在使用/unsafe编译的情况下出现”。项目- 属性- 配置属性- 生成,“允许不安全代码”设置成true 2、定义非安全代码在C#中如果想使用指针就需要将代码定义为unsafe。unsafe是C#中的一个关键字,我们可以将一个类、一个方法、代码块或者字段标记为unsafe。剩下的工作就和在其它语言中使用指针相同了。下面是一个使用指针的代码演示。 /将方法声明为非安全 public unsafe void Test() int i=10; int k; /定义指针 int *j; /给指针赋值 j=& i; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度劳务派遣劳动合同管理服务合同
- 2025版影视制作临时工劳动合同范本
- 2025版合肥二手房买卖合同范本:产权登记与抵押登记手续
- 2025版百货零售业线上线下融合营销合作协议
- 2025版区域代理合作协议范本-含市场渠道拓展支持
- 2024年清远市连南瑶族自治县招聘初中教师真题
- 二零二五年度驾驶员劳动合同解除与再就业咨询协议
- 安宁市第一人民医院招聘笔试真题2024
- 2025版小微企业数字化贷款第三方担保合同样本
- 二零二五年度多人股东合作研发新型材料协议范本
- 2025-2030中国家政服务从业人员培训体系与职业发展白皮书
- 2025年安全风险分级管控培训考试试题(附答案)
- 厂区用电安全管理制度
- 2025年消防员招录面试题库及答案
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理体系 审核与认证机构要求》中文版(机翻)
- 《食用菌工厂化栽培》课程教学大纲
- 民法典合同编之合同的变更和转让重点条文案例详细解读PPT
- 中国大地财产保险股份有限公司车险核保人员技术认证定级考试大纲
- 高频振荡(HFOV)通气讲解课件
- 《石油化工建设工程项目交工技术文件规定》sh t35032007交工资料表格(设备安装工程)
- 2010年沙多玛技术研讨会
评论
0/150
提交评论