none
c# 指针 新建一个指针,和原来的指针的指向相同,但这个指针的指向修改不影响原来的指针,如何做啊? RRS feed

答案

  • 楼主:)

    C#不是非常建议使用指针,因为指针是“非托管代码”,其实你完全可以使用一般的类引用实现该功能——

    譬如:

    namespace CSharp
    {
        public class Pointer
        {
            public int Number { getset; }
            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);
            }
        }
    }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月1日 2:29
    版主

全部回复

  • 定义 a b c d 三个指针

    b=a

    c=a

    然后修改

    c=d

    基本上能达到你要求了

    不过指针的学习需要稍微多一点的想象力(或者空间想象能力,貌似以前学的立体几何有帮助)


    family as water

    2012年7月1日 1:11
  • 楼主:)

    C#不是非常建议使用指针,因为指针是“非托管代码”,其实你完全可以使用一般的类引用实现该功能——

    譬如:

    namespace CSharp
    {
        public class Pointer
        {
            public int Number { getset; }
            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);
            }
        }
    }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月1日 2:29
    版主
  • 谢谢2位,是我自己想复杂了,然后又没动手去做做。

    2012年7月1日 5:22
  • 谢谢2位,是我自己想复杂了,然后又没动手去做做。

    欢迎再来,互帮互助!

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月1日 5:30
    版主