C# 指针、内存管理与公共语言基础结构深度解析
指针与地址
栈是宝贵的资源,虽然空间小,但栈空间耗尽会导致程序崩溃,因此要尽力避免这种情况。通常程序的栈空间小于 1MB,甚至可能更少,所以要谨慎避免在栈上分配任意大小的缓冲区。
指针解引用
访问指针所引用类型变量中存储的数据,需要对指针进行解引用,即在表达式前加上间接运算符。例如:
byte data = *pData;此代码对pData所引用的字节位置进行解引用,并返回该位置的单个字节。
利用这个原理,在不安全代码中可以修改“不可变”字符串,示例代码如下:
string text = "S5280ft"; Console.Write("{0} = ", text); unsafe // Requires /unsafe switch. { fixed (char* pText = text) { char* p = pText; *++p = 'm'; *++p = 'i'; *++p = 'l'; *++p = 'e'; *++p = ' '; *++p = ' '; } } Console.WriteLine(text);运行结果为: