重新解释记忆

时间:2014-05-11 21:09:03

标签: c c99

我一直在谷歌上搜索并且已经阅读了很多,但我仍然不太了解它。我希望这里有人可以举一个带有详细解释的样本。

什么是"重新解释记忆"?

我想说:

char *myChar;

int myInt = 5;

//Or

float myFloat = 5.5;

我想更改myChar所以它指向,例如,intfloat,如上所述。

我怎样才能利用"重新解释内存"使这项工作成为myChar可以指向myIntmyFloat

再一次,"重新解释内存"意思?

编辑:

我真正想做的不是将intfloat转换为char指针,而是将myChar实际更改为{{1}类型}或int指向floatmyInt

即:

myFloat

3 个答案:

答案 0 :(得分:1)

mychar = (char *)&myInt;

“重新解释内存”这里意味着您正在处理包含int表示的字节,就好像它们包含char的表示一样。

C标准谈到允许您执行此操作的类型。出于阅读目的,您可以将任何对象视为包含char的对象,但是在大多数情况下,您无法移植回写它,并且您无法为两个非char类型进行移植。< / p>

答案 1 :(得分:0)

char* myChar;

为简单起见假设大端:

                       memory
                 +----+----+----+----+
int myInt = 5;   | 05 | 00 | 00 | 00 |
                 +----+----+----+----+

整数值5我放在一个足够大的内存插槽中 持有一个int

您可以通过设置访问这四个字节中的每一个 使用char * myChar并指向第一个字节(因为myChar的大小为1)

myChar = &myInt;

使用myChar,您实际上将myInt的内存解释为 通过myChar指针的一系列字节(字符)。

还可以将整数指针作为比较

int myPtr = &myInt;

现在你有一个指向整数

的整数指针

访问内存的指针的数据类型决定 指针的行为:

myChar + 1 means the next byte (0)
myPtr + 1  means the next int (if myInt where an array of ints)

答案 2 :(得分:-1)

直言不讳,术语&#34;重新解释记忆&#34;听起来像是一个试图重建历史的政治自由派。从C编程的角度来看,听起来有人试图用一个新的术语来用他们语法的语法命令来打动他们的学生。

最有可能的是,它与铸造或工会有关;两者都允许以不同的方式解释内存内容。


问题编辑:我真正想做的不是将int或float转换为char指针,而是实际将myChar更改为int类型或浮点指向myInt或myFloat。

也许尝试一个工会?

union 
   {
   void  *myVoid
   char  *myChar;
   int   *myInt;
   float *myFloat;
   } myPtr;

然后使用它:

char character = 'x';
int  integer   = 12345;
float floatie  = 3.1415926535;

然后:

myPtr.myChar = &character;
printf("myChar: %c\n", *myPtr.myChar); // Output: "myChar: x"

myPtr.myInt = &integer;
printf("myInt: %d\n", *myPtr.myInt); // Output: "myInt: 12345"

myPtr.myFloat = &floatie;
printf("myFloat: %f\n", *myPtr.myFloat);