在C#中可以在unsafe模式下使用指针。
一些使用测试:
int a 和 int b; 显示他们 的地址
int abc 来存储a的地址。
int * ppp指针 用上面abc的地址给这指针赋值。
unsafe static void Main(string[] args)
{
int a = 2;
int b = 33;
int* p1= &a;
Console.WriteLine("a地址:" + (int)p1);
Console.WriteLine("a值:" + *p1);
Console.WriteLine("a+1地址对应的值:" + *(p1 +1));
int abc = (int)&a;
Console.WriteLine("abc:" + abc);
Console.WriteLine("abc:" + (int)&abc);
int* ppp = (int*)(abc+4);
// ppp = (int*)abc;
Console.WriteLine("哈哈 ,以abc为地址的值:" + *ppp);
}
结果:
a地址:482534208
a值:2
a+1地址对应的值:33;
abc:482534208
abc:482534232
哈哈,以abc为地址的值:33
我发现a和b在内存中内存地址相差4,因为int类型是4个字节。 所以上面*(p+1)指向b 下面有(int*)(abc+4) 也指向b
int *ppp=(int*)(abc+4); 这句话也可以写成 int* ppp=(int*)abc+1;
ok