C#使用指针问题(很奇怪的现象)
手抓饼加辣 2009-11-04 10:25:21 先看代码:
unsafe
{
int num = 123456;
int* pN = #
int cou = 3;
Console.WriteLine("pn指向的地址:{0}", (uint)pN);
Console.WriteLine("pn的地址:{0}", (uint)&pN);
Console.WriteLine("pn指向地址存储的值:{0}", *pN);
Console.WriteLine("声明一个指向指针pN的指针pP");
//声明一个指向指针的指针
int** pP = &pN;
Console.WriteLine("pP是一个指向pN这个指针的指针,pP指向的地址为:{0}", (uint)pP);
Console.WriteLine("pP的地址为:{0}", (uint)&pP);
if (Console.ReadLine() == "1")
{
//下面这句要是注释了,cou就没有在堆栈中存储值
Console.WriteLine((int)&cou);
}
Console.ReadLine();
}
我是这样想的:假设num在堆栈中的地址从1242232开始,占4个字节,那么pN在堆栈中的地址应该是从1242228开始,占4个字节,然后cou从1242224开始,占4个字节,最后pP应该是从1242220开始,占4个字节。
可是我发现当我不要 Console.WriteLine((int)&cou);这一句,pP的地址就是从1242224开始了,也就是说cou不在堆栈中占据位置了。我非常不明白是为什么(就一句话,为什么影响这么大?),希望大家能帮帮我,在此谢谢大家了。