这几天在用C#里面的指针与结构体,感觉是N复杂啊,下面是我写的一个程序:
        
        unsafe public struct node 
        {
            public int i,j;
            public node* next;
        }
        unsafe public node* f = null, r = null; //用于记录存取节点的链接队列的首尾指针
        unsafe public void insert (int k,int l)
        {
            node newNode=new node();
            newNode.i = k;
            newNode.j = l;
            newNode.next = null;
            if (f == null)
            {
                f = &newNode;
            }
            else 
            {
                r->next = &newNode;
            }
            r = &newNode;
        }
        unsafe public void procNode(byte* ptr2) 
        {
            Bitmap newBp;
            insert(100, 100);
            int temp=f->i;             ///这句就是出问题的地方,本来应该是100的,但为啥得到的是0?!!!~~~
        } 请大家给我看看啊,我现在很急,在线等!!!~~~

解决方案 »

  1.   

    那应该用C++或C,在C#里没必要用指针偏要用指针那是闲得蛋疼.
    另外你确认你的测试没问题吗?我试了N次确认是100(.net3.5 C#编译器).
      

  2.   

    汗...
    看到指针思维跟着C/C++走了.node是一个struct也就是一个值类型.
    也就意味着如果你使用new初始化node则它是在栈上分配的.而超出函
    数作用域使用栈上的指针...囧.后果学过编程的应该都知道如果你硬要使用指针的话...用Marshal分配内存后强制转型成指针吧.
      

  3.   

    在引用insert方法时是正常的,但是一旦引用完开始执行下一句时,i,j就有都变成了0,为什么呢?!
      

  4.   

    恩,感觉你说的很在理,我是刚学接触C#的,之前的编程经验也不足,希望你能赐教啊。你说用Marshal分配内存后强制转型成指针,能具体点么?