这几天在用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?!!!~~~
} 请大家给我看看啊,我现在很急,在线等!!!~~~
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?!!!~~~
} 请大家给我看看啊,我现在很急,在线等!!!~~~
另外你确认你的测试没问题吗?我试了N次确认是100(.net3.5 C#编译器).
看到指针思维跟着C/C++走了.node是一个struct也就是一个值类型.
也就意味着如果你使用new初始化node则它是在栈上分配的.而超出函
数作用域使用栈上的指针...囧.后果学过编程的应该都知道如果你硬要使用指针的话...用Marshal分配内存后强制转型成指针吧.