Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 变量的内存地址_C#_Memory_Variables - Fatal编程技术网

C# 变量的内存地址

C# 变量的内存地址,c#,memory,variables,C#,Memory,Variables,是否可以在C#中获取变量的内存地址 我想做的很简单。我想声明Double类型的变量, 浮点、十进制,并将值1.1分配给每个变量。那么我想 去看看这些值在内存中是如何表示的。我需要记忆 以查看变量的地址如何存储在内存中。一旦我有了 内存地址我计划在代码中加一个断点,并使用Debug->Windows->memory 选项以查看数字如何存储在内存中 干杯,如果您只想看看内存中的内容是如何表示的,那么请使用将返回字节数组的类。你可以在C#中得到变量的地址,但这可能没有多大意义 当然,BitConver

是否可以在C#中获取变量的内存地址

我想做的很简单。我想声明Double类型的变量, 浮点、十进制,并将值1.1分配给每个变量。那么我想 去看看这些值在内存中是如何表示的。我需要记忆 以查看变量的地址如何存储在内存中。一旦我有了 内存地址我计划在代码中加一个断点,并使用Debug->Windows->memory 选项以查看数字如何存储在内存中


干杯,

如果您只想看看内存中的内容是如何表示的,那么请使用将返回字节数组的类。你可以在C#中得到变量的地址,但这可能没有多大意义


当然,BitConverter不处理小数,所以您可以使用“调试内存”窗口,在变量范围内使用语法
&varname
,它会为您计算出地址。

同意泰兰德,在内部,它们将以位的形式重新呈现,并且获取它们的内存地址不会起任何作用。另一方面,您可以使用ILDASM检查编译器对C代码中指定的值所生成的实际类型。 如果您通过ILDasm检查IL代码,那么这就是C#编译器为上述偏差生成的代码:-

//000012:             double d1 = 21.1;
  IL_0001:  ldc.r8     21.100000000000001
..............
//000013:             decimal d2 = 22.1M;
  IL_000b:  ldc.i4     0xdd
...............
//000014:             float d3 = 21.1F;
  IL_001a:  ldc.r4     21.1

在这里,您可以看到十进制在内部表示为十六进制数。

是的,可以获得指向C#中存储器的原始指针。我建议您阅读《C#规范》第18章的全部内容,而不是在这里对其进行解释,该章详细讨论了这一主题

但是,如果您想了解各种不同的浮点类型如何存储值,有比在调试器中查看它们更简单的方法。这些都是记录良好的格式;您可以在维基百科或msdn中查找它们,并了解它们在内存中的布局

十进制值的二进制表示法由1位符号、96位整数和用于除以96位整数并指定其中哪部分是小数的比例因子组成。比例因子隐式为数字10,其指数范围为0到28

有关详细信息,请参阅

double的二进制表示是一个符号位,11个指数位表示从-1022到+1023的指数,52个尾数位被解释为“1”,后跟52个位

请参阅或我的浮点问题系列文章:


浮点与双精度浮点相同,只是大小的一半:一个符号位,8个指数位,23个尾数位。有关详细信息,请参阅。

感谢您抽出时间回答。感谢您抽出时间回答。感谢您抽出时间回答。
//000012:             double d1 = 21.1;
  IL_0001:  ldc.r8     21.100000000000001
..............
//000013:             decimal d2 = 22.1M;
  IL_000b:  ldc.i4     0xdd
...............
//000014:             float d3 = 21.1F;
  IL_001a:  ldc.r4     21.1