内部跳过的内存地址是什么?

时间:2016-06-11 08:20:40

标签: c++

我们知道整数变量占用4(字节)内存地址。我只是想知道,如果我们初始化整数变量并指向它。我可以从指针获取它的值(它具有变量的地址:我的计算机中的0x22fef8)。但是0x22fef8之后的内存地址如何是0x22fef9,0x22fefa,0x22fefb?那里有什么?如果我们取消引用这个地址,我们会得到变量的值吗?如何访问它们?

谢谢。

3 个答案:

答案 0 :(得分:5)

你是对的:在32位计算机中,一个整数占用四个字节。在C中,可以用以下代码表示:

int i = 0x12345678;
int *p_i = &i;`

如果p_i获得值0x22fef8,则p_i++将变为0x22fefc,因为它将指向下一个整数。如果要查看组成i的字节中的内容,则需要使用不同的指针:

typedef uint_8 byte;
byte *p_b = (byte *)&i;`

这意味着您将&i表示的指针更改为int并将其类型转换为指向字节的指针。它仍然具有值0x22fef8,因为i的第一个字节是 - 但现在如果你执行p_b++,它将更改为0x22fef9。请注意,如果您打印出*p_b的原始值(即它指向的字节),它将不会提供与i相同的值。根据计算机的不同,它将打印出第一个字节或最后一个字节:0x120x78,或至少打印出其十进制版本。

这是由于" endianness"计算机,它影响多字节值的存储。像x86这样的小端计算机首先存储价值的最小部分 - 0x78 - 而Power PC计算机首先存储价值的最大部分 - 0x12

答案 1 :(得分:1)

int类型占用系统上的四个字节,因此这些类型都被int占用。除第一个外,所有这些都无法访问。

值得注意的是,有些int在其他系统上占用了两个字节。它不受标准的约束。

答案 2 :(得分:0)

如果您想查看这些地址中的值,只需执行此操作即可获得下10个地址的值

int main()
{
  int a = 5;
  int *p_i = &a; // The address of 'a' is stored in pointer 'p_i'

  // Now you want to check the values in 10 further addresses 

  for ( int i = 0; i < 10; i++ )
  {
    int value = *p_i;  // Here it is getting the address of pointer as integer value
    cout << value << endl;
    p_i++;
  }

  return 0;
}