C# 不安全代码html
理论:
c#
当一个代码块使用 unsafe 修饰符标记时,C# 容许在函数中使用指针变量。数组
不安全代码或非托管代码是指使用了指针变量的代码块。安全
指针变量ide
指针 是值为另外一个变量的地址的变量,即,内存位置的直接地址。就像其余变量或常量,您必须在使用指针存储其余变量地址以前声明指针。函数
指针变量声明的通常形式为: type *var-name;ui
如下是有效的指针声明:spa
int *ip; /* 指向一个整数 */ double *dp; /* 指向一个双精度数 */ float *fp; /* 指向一个浮点数 */ char *ch /* 指向一个字符 */
实例1:命令行
下面的实例说明了 C# 中使用了 unsafe 修饰符时指针的使用:指针
using System; namespace UnsafeCodeApplication { class Program { static unsafe void Main(string[] args) { int var = 20; int* p = &var; Console.WriteLine("Data is: {0} ", var); Console.WriteLine("Address is: {0}", (int)p); Console.ReadKey(); } } } //当上面的代码被编译和执行时,它会产生下列结果: //Data is: 20 //Address is: 99215364
实例2:
您也能够不用声明整个方法做为不安全代码,只须要声明方法的一部分做为不安全代码。下面的实例说明了这点。
您可使用 ToString() 方法检索存储在指针变量所引用位置的数据。下面的实例演示了这点:
using System; namespace UnsafeCodeApplication { class Program { public static void Main() { unsafe { int 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: 20 //Data is: 20 //Address is: 77128984
实例3:
您能够向方法传递指针变量做为方法的参数。下面的实例说明了这点:
在 C# 中,数组名称和一个指向与数组数据具备相同数据类型的指针是不一样的变量类型。例如,int *p 和 int[] p 是不一样的类型。您能够增长指针变量 p,由于它在内存中不是固定的,可是数组地址在内存中是固定的,因此您不能增长数组 p。
所以,若是您须要使用指针变量访问数组数据,能够像咱们一般在 C 或 C++ 中所作的那样,使用 fixed 关键字来固定指针。
下面的实例演示了这点:
using System; namespace UnsafeCodeApplication { class TestPointer { public unsafe static void Main() { int[] list = {10, 100, 200}; fixed(int *ptr = list) /* 显示指针中数组地址 */ for ( int i = 0; i < 3; i++) { Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr + i)); Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i)); } Console.ReadKey(); } } } //当上面的代码被编译和执行时,它会产生下列结果: //Address of list[0] = 31627168 //Value of list[0] = 10 //Address of list[1] = 31627172 //Value of list[1] = 100 //Address of list[2] = 31627176 //Value of list[2] = 200
实例5:
为了编译不安全代码,您必须切换到命令行编译器指定 /unsafe 命令行。
例如,为了编译包含不安全代码的名为 prog1.cs 的程序,需在命令行中输入命令:
csc /unsafe prog1.cs
若是您使用的是 Visual Studio IDE,那么您须要在项目属性中启用不安全代码。
步骤以下:
经过双击资源管理器(Solution Explorer)中的属性(properties)节点,打开项目属性(project properties)。
点击 Build 标签页。
选择选项"Allow unsafe code"。
参考:
http://outofmemory.cn/csharp/tutorial/csharp-unsafe-codes.html