当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。
不安全代码或非托管代码是指使用了指针变量的代码块。
指针 是值为另一个变量的地址的变量,即,内存位置的直接地址。
传递指针作为方法的参数
using System;
namespace CSharpTest01
{
class TestPointer
{
public unsafe void Swap(int* p, int* q)
{
Console.WriteLine(*p);
Console.WriteLine(*q);
int temp = *p;
*p = *q;
*q = temp;
}
}
class Program
{
static void Main(string[] args)
{
unsafe
{
TestPointer testPointer = new TestPointer();
int val1 = 10;
int val2 = 20;
int* x = &val1;
int* y = &val2;
Console.WriteLine(*x);
Console.WriteLine((int)x);
Console.WriteLine((int)&val1);
testPointer.Swap(x, y);
Console.WriteLine("{0} {1}", val1, val2);
Console.ReadKey();
}
}
}
}
使用指针访问数组元素
using System;
namespace CSharpTest01
{
class Program
{
static void Main(string[] args)
{
unsafe
{
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();
}
}
}
}