在CLR 中,不安全代码是指无法验证的代码。 C# 中的不安全代码不一定是危险的;只是 CLR 无法验证该代码的安全性。 因此,CLR 将仅执行完全信任的程序集中的不安全代码。在c#使用不安全代码需要使用unsafe关键字
在c#使用指针时我们需要:设置项目允许编译不安全代码
初步了解指针
1 通过指针引用变量(间接访问)
在上面这段代码中 并没有使用ref 与 out 参数 ,但是Main 函数中的 Number1 与Number2 值依然发生了改变
在指针变量中 有两个重要的运算符 & and *
在每一个变量声明时 系统会开辟 对应大小的内存空间 来存储这个值 每个内存空间都会有对应的内存地址
在上面这段代码中 使用&Number1,&Number2 分别将值传给了int * 类型 的a变量 与b变量
也就是说现在 a 与 Number1 同时指向 10存在的内存单元 ,b与 Number2 同时指向 11存在的内存单元
因此在改变 a 与 b 的值时 外面 Numbe1.2 的值也会做出改变
- 为什么要使用指针
- 合理的使用指针,可以提高程序的执行速度,因为指针是直接操作内存的
- flexd
- fixed 语句可防止垃圾回收器重新定位可移动的变量。 fixed 语句仅允许存在于不安全的上下文中。
//使用指针对遍历数组
int[] sum = new int[100001];
sum[100000] = 10;
fixed (int* index = &sum[0]) //index 指向sum数组第一个元素
{
int* p = index;
while (*p != 10)
{
p++;
}
Console.WriteLine(*p);
}