将整数变量地址赋值给字符指针

时间:2013-12-15 08:12:49

标签: c++ pointers

以下是一段C ++代码,它将整数变量地址分配给字符指针。

int ia = (1<<25) + (1<<24) + (1<<17) + (1<<8) + 4;
char *cArr = (char *)(&ia);
int i;
for(i = 0; i < 4; i++){ cout << (int)cArr[i] << endl; }

我选择了整数变量,以便MSB字节的值为3,下一个值为2,下一个值为1,LSB字节值为4.

现在,当我将整数的地址分配给字符指针时,我得到以下结果:

cArr[0] = 4
cArr[1] = 1
cArr[2] = 2
cArr[3] = 3

我对此结果有一些疑问:

  1. 无论我工作的机器如何,LSB字节始终都会获得第一个地址。
  2. 结果与Little Endian和Big Endian有关。另外,我正在寻找一些基础教程,可以让我了解Little Endian和Big Endian的基础知识。
  3. 结果与堆栈在计算机上的增长方式有关。

  4. 顺便说一句,我在Windows PC上工作

2 个答案:

答案 0 :(得分:2)

1)。不,这取决于计算机体系结构和硬件。以下是可以作为参考的表格。 enter image description here

2)。基础教程。希望这就足够了。  http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html

3)。从桌面窗口看,堆栈没有任何关系,Little Endian因此LSB排在第一位。

如果能回答您,请告诉我。

再见!

答案 1 :(得分:1)

  1. 没有。结果取决于您的系统硬件类型。只有小端机才能获得结果。

  2. 正如问题1一样,这确实是由小端或大端决定的。这是关于endian的全面介绍。 http://www.yolinux.com/TUTORIALS/Endian-Byte-Order.html

  3. 在您的情况下与堆栈无关。