using System;class test
{
public static unsafe void Main()
{
CurrencyStruct amount1;
CurrencyStruct amount2;
CurrencyStruct amount3;
//CurrencyStruct* pAmount = &amount1;
Console.WriteLine("amount1:"+(uint)&amount1);
Console.WriteLine("amount2:"+(uint)&amount2);
Console.WriteLine("amount3:"+(uint)&amount3);
//Console.WriteLine("pAmount:"+(uint)&pAmount);
Console.ReadLine();
}
} struct CurrencyStruct
{
public long a;
public byte b;
}
运行以上代码,得出的结果是:
amount1:1242748
amount2:1242764
amount3:1242780
在堆栈上,不是按变量的声明顺序向下填充的吗?怎么以上结果是升序的?把代码中的注释去掉,得出的结果是:
amount1:1242776
amount2:1242760
amount3:1242744
pAmount:1242740
前三个变量的地址完全变了,而且是降序的,是什么原因呢,谁能解释一下?
{
public static unsafe void Main()
{
CurrencyStruct amount1;
CurrencyStruct amount2;
CurrencyStruct amount3;
//CurrencyStruct* pAmount = &amount1;
Console.WriteLine("amount1:"+(uint)&amount1);
Console.WriteLine("amount2:"+(uint)&amount2);
Console.WriteLine("amount3:"+(uint)&amount3);
//Console.WriteLine("pAmount:"+(uint)&pAmount);
Console.ReadLine();
}
} struct CurrencyStruct
{
public long a;
public byte b;
}
运行以上代码,得出的结果是:
amount1:1242748
amount2:1242764
amount3:1242780
在堆栈上,不是按变量的声明顺序向下填充的吗?怎么以上结果是升序的?把代码中的注释去掉,得出的结果是:
amount1:1242776
amount2:1242760
amount3:1242744
pAmount:1242740
前三个变量的地址完全变了,而且是降序的,是什么原因呢,谁能解释一下?
{
public Form1()
{
InitializeComponent(); test.testa(txtInfo);
}
}class test
{
public static unsafe void testa( TextBox t)
{
CurrencyStruct amount1;
CurrencyStruct amount2;
CurrencyStruct amount3;
//CurrencyStruct* pAmount = &amount1;
t.AppendText("amount1:"+(uint)&amount1 + "\n");
t.AppendText("amount2:" + (uint)&amount2 + "\n");
t.AppendText("amount3:" + (uint)&amount3 + "\n");
//t.AppendText("pAmount:" + (uint)&pAmount + "\n"); //Console.WriteLine("amount1:"+(uint)&amount1);
//Console.WriteLine("amount2:"+(uint)&amount2);
//Console.WriteLine("amount3:"+(uint)&amount3);
//Console.WriteLine("pAmount:"+(uint)&pAmount);
// Console.ReadLine();
}