积极答复者
c# 指针 新建一个指针,和原来的指针的指向相同,但这个指针的指向修改不影响原来的指针,如何做啊?

问题
答案
-
楼主:)
C#不是非常建议使用指针,因为指针是“非托管代码”,其实你完全可以使用一般的类引用实现该功能——
譬如:
namespace CSharp { public class Pointer { public int Number { get; set; } public override string ToString() { Console.WriteLine("结果是:"); return Number.ToString(); } } public class MainTest { static void Fun(Pointer p2) { p2 = null; } static void Main(string[] args) { //Pointer自身是一个类的引用,指向堆栈,其实是一个C#托管的安全指针。 Pointer p = new Pointer(); p.Number = 5; //调用改变函数,你先猜猜结果是(会抛异常吗?!) Fun(p); Console.WriteLine(p); } } }
上面的代码就是说明指针指向的原来内容一旦发生了改变,那么函数内的指针p2自动指向了null,而且一旦函数执行完毕出函数体,p2自动被释放。
【C#原则上不支持指针,但是你可以这样做】
1、右键项目属性,“生成”=>“允许不安全代码”(打勾).
2、修改如下:
namespace CSharp { public class MainTest { unsafe static void Main(string[] args) { int k = 0; int* a = &k; int* b = a; *a = 1; b = null; //b指针发生指向改变,不影响a的内容! Console.WriteLine(k); } } }
- 已标记为答案 Linfa Jiang 2012年7月1日 5:21
全部回复
-
楼主:)
C#不是非常建议使用指针,因为指针是“非托管代码”,其实你完全可以使用一般的类引用实现该功能——
譬如:
namespace CSharp { public class Pointer { public int Number { get; set; } public override string ToString() { Console.WriteLine("结果是:"); return Number.ToString(); } } public class MainTest { static void Fun(Pointer p2) { p2 = null; } static void Main(string[] args) { //Pointer自身是一个类的引用,指向堆栈,其实是一个C#托管的安全指针。 Pointer p = new Pointer(); p.Number = 5; //调用改变函数,你先猜猜结果是(会抛异常吗?!) Fun(p); Console.WriteLine(p); } } }
上面的代码就是说明指针指向的原来内容一旦发生了改变,那么函数内的指针p2自动指向了null,而且一旦函数执行完毕出函数体,p2自动被释放。
【C#原则上不支持指针,但是你可以这样做】
1、右键项目属性,“生成”=>“允许不安全代码”(打勾).
2、修改如下:
namespace CSharp { public class MainTest { unsafe static void Main(string[] args) { int k = 0; int* a = &k; int* b = a; *a = 1; b = null; //b指针发生指向改变,不影响a的内容! Console.WriteLine(k); } } }
- 已标记为答案 Linfa Jiang 2012年7月1日 5:21