C#固定指针
在语句块前输入关键字fixed,将会告诉CLR块内的对象不能重定位,这样CLR就不会重定位指针指向的数据存储位置。因此在C#固定指针时,使用关键字fixed将能阻止程序运行时无效指针的产生。让我们看看它是如何工作的:
- using System;
- class CData
- {
- public int x;
- }
- class CProgram
- {
- unsafe static void SetVal(int *pInt)
- {
- *pInt=1979;
- }
- public unsafe static void Main()
- {
- CData d = new CData();
- Console.WriteLine("Previous value: {0}", d.x);
- fixed(int *p=&d.x)
- {
- SetVal(p);
- }
- Console.WriteLine("New value: {0}", d.x);
- }
- }
我们在这段代码里通过一个fixed块,将CData对象数据成员(域)x的地址赋给了一个整数型指针p。当fixed块中的语句被执行时,这个指针p将一直指向原来的那块内存区域,因为CLR已被指示暂时冻结这个变量直到该fixed块执行完毕。一旦fixed块执行完毕,这个对象就又能被CLR 重新定位了。
以上就是C#固定指针编程的介绍,关键是要说明语句块是unsafe并fixed的。希望能因此提高你对C#固定指针使用的知识!
【编辑推荐】