C#使用托管平台,不允许操作变量地址,实际可以在获取变量的地址的,修改地址变量指向的值,也即修改了变量的值。
如下测试:获取变量的地址。声明一个指向整型变量的指针 p,并将整数变量 number 的地址赋值给该指针,修改指针指向的的值,验证变量的值是否和修改指针指向的值一样。
static void Main(string[] args)
{
int number=10;
unsafe
{
//将变量number 的地址赋值给一个整型指针变量 *p
int* p = &number;
//输出指针变量*p的地址值
Console.WriteLine($"Value at the location pointed to by p:0x{*p:X}");
//输出 指针变量地址:
long address = (int)p;
Console.WriteLine($"The address stored in p: {address},0x{address:X}");
//修改指针变量指向的值
*p = 20;
}
// Print the value of the variable number:
Console.WriteLine("Value of the variable number: {0:X}", number);
System.Console.ReadKey();
}
输出:
Value at the location pointed to by p:0xA
The address stored in p: -797971444,0xFFFFFFFFD06FEC0C
Value of the variable number: 14
修改指针地址所指向内存中的值,即可修改变量的值。
要设置项目允许不安全代码:
网友评论