C# 不安全代码

上传人:野鹰 文档编号:1087833 上传时间:2017-05-27 格式:PDF 页数:5 大小:116.66KB
返回 下载 相关 举报
C# 不安全代码_第1页
第1页 / 共5页
C# 不安全代码_第2页
第2页 / 共5页
C# 不安全代码_第3页
第3页 / 共5页
C# 不安全代码_第4页
第4页 / 共5页
C# 不安全代码_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《C# 不安全代码》由会员分享,可在线阅读,更多相关《C# 不安全代码(5页珍藏版)》请在金锄头文库上搜索。

1、C# 不安全代码不安全代码当代码段被 unsafe 修饰符标记时,C# 允许该代码段中的函数使指针变量,故使了指针变量的代码块又被称为不安全代码或托管代码。注意:若要在 codingground 中执本章的程序,请将 Project CompileOptions Compilation Command to 中的编辑项设置为 mcs *.cs -out:main.exe -unsafe指针指针是指其值为另个变量的地址的变量,即内存位置的直接地址。如般的变量或常量样,在使指针来存储其他变量的地址之前,必须先进指针声明。声明指针变量的般形式为:type *var-name;以下为些有效的指针声明例

2、:int *ip; /* pointer to an integer */double *dp; /* pointer to a double */float *fp; /* pointer to a float */char *ch /* pointer to a character */下述例为在 C# 中使了 unsafe 修饰符时指针的使:using System;namespace UnsafeCodeApplicationclass Programstatic unsafe void Main(string args)int var = 20;int* p = &var;Conso

3、le.WriteLine(Data is: 0 , var);Console.WriteLine(Address is: 0, (int)p);Console.ReadKey();编译执上述代码,得到如下结果:Data is: 20Address is: 99215364除了将整个法声明为不安全代码之外,还可以只将部分代码声明为不安全代码,下章节中的的例说明了这点。使指针检索数据值使 ToString() 法可以检索存储在指针变量所引位置的数据。例如:using System;namespace UnsafeCodeApplicationclass Programpublic static v

4、oid Main()unsafeint var = 20;int* p = &var;Console.WriteLine(Data is: 0 , var);Console.WriteLine(Data is: 0 , p-ToString();Console.WriteLine(Address is: 0 , (int)p);Console.ReadKey();编译执上述代码,得到如下结果Data is: 20Data is: 20Address is: 77128984传递指针作为法的参数指针可以作为法中的参数,例如:using System;namespace UnsafeCodeApp

5、licationclass TestPointerpublic unsafe void swap(int* p, int *q)int temp = *p;*p = *q;*q = temp;public unsafe static void Main()TestPointer p = new TestPointer();int var1 = 10;int var2 = 20;int* x = &var1;int* y = &var2;Console.WriteLine(Before Swap: var1:0, var2: 1, var1, var2);p.swap(x, y);Console

6、.WriteLine(After Swap: var1:0, var2: 1, var1, var2);Console.ReadKey();编译执上述代码,得到如下结果:Before Swap: var1: 10, var2: 20After Swap: var1: 20, var2: 10使指针访问数组元素在 C# 中,数组名称与个指向与数组数据具有相同数据类型的指针是不同的变量类型。例如 int *p 和 int 是不同的类型。你可以对指针变量 p 进加操作,因为它在内存中是不固定的,反之,数组的地址在内存中是固定的,因法对其直接进加操作。故如同 C 或 C+,这同样需要使个指针变量来访问

7、数组数据,并且需要使fixed 关键字来固定指针,例如下:using System;namespace UnsafeCodeApplicationclass TestPointerpublic unsafe static void Main()int list = 10, 100, 200;fixed(int *ptr = list)/* let us have array address in pointer */for ( int i = 0; i 3; i+)Console.WriteLine(Address of list0=1,i,(intConsole.WriteLine(Valu

8、e of list0=1, i, *(ptr + i);Console.ReadKey();编译执上述代码,得到如下结果:Address of list0 = 31627168Value of list0 = 10Address of list1 = 31627172Value of list1 = 100Address of list2 = 31627176Value of list2 = 200编译不安全代码必须切换命令编译器到指定的 /unsafe 命令才能进不安全代码的编译。例如,编译个包含不安全代码的名为 prog1.cs 的程序,需要在命令中输如下命令:csc /unsafe prog1.cs在 Visual Studio IDE 环境中编译不安全代码,需要在项属性中启相关设置。步骤如下:双击资源管理器中的属性节点,打开项属性。点击 Build 标签页。选择选项 Allow unsafe code。W3Cschool()最的技术知识分享与学习平台此篇内容来于站户上传并发布。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号