C# 不安全代码指针
2018-01-22 17:09 更新
C# 不安全代码指针
C#可以通过标记为不安全的代码块中的指针进行直接内存操作。
不安全代码应使用 /unsafe
编译器选项进行编译。
指针基础
指针实例保存变量的地址。
指针类型可以转换为任何其他指针类型。
主要的指针运算符是:
运算符 | 含义 |
---|---|
& | 返回一个指向变量地址的指针 |
* | 返回指针地址处的变量 |
-> | 一个语法快捷方式,其中x-> y等价于(* x).y |
不安全代码
通过用unsafe关键字标记类型,类型成员或语句块,我们可以使用指针类型并对内存执行C ++风格指针操作。
下面是使用指针快速处理数组的示例:
unsafe void Process (int[,] data){
int length = data.Length;
fixed (int* b = data){
int* p = b;
for (int i = 0; i < length; i++)
*p++ &= 0xFF;
}
}
固定语句
在一个固定语句中,我们可以获得任何值类型的指针,值类型的数组或字符串。
在数组和字符串的情况下,指针将实际指向第一个元素,它是一个值类型。
在引用类型中声明为内联的值类型需要将引用类型固定,如下所示:
class Main {
int x;
static void Main(){
Test test = new Test();
unsafe{
fixed (int* p = &test.x) // Pins test
{
*p = 0;
}
System.Console.WriteLine (test.x);
}
}
}
指针到成员运算符
除了&
和 *
运算符之外,C#还提供了C ++风格的 ->
运算符,它可以在结构上使用:
struct Test{
int x;
unsafe static void Main(){
Test test = new Test();
Test* p = &test;
p->x = 1;
System.Console.WriteLine (test.x);
}
}
以上内容是否对您有帮助:
← C# 属性
更多建议: