指向内存中最低地址的指针

时间:2011-12-06 20:12:40

标签: c++

  

可能重复:
  Detecting endianness programmatically in a C++ program

我正在尝试检查我是否运行了一个小端或大端的操作系统。

int main()
{
    int i = 1; 
    unsigned char b = i; 
    char *c = reinterpret_cast<char*>(&i); // line 5

    cout << "Processor identified as: " << endl;

    if (*c == b) 
        cout << "Little endian" << endl;
    else
        cout << "Big endian" << endl;
}

我不确定在第5行中投射int*char*指针是否保证返回最低地址。我做得对吗?

3 个答案:

答案 0 :(得分:0)

它可能会给你调用堆栈的底部地址(主线程)。

但堆地址可能会比较低(或更高)地址。

此外,堆栈增长方向与endianess正交。

答案 1 :(得分:0)

C ++标准对整数的字节内容没有任何限制。您可能会发现一些既不是小端也不是大端的系统 - 例如,PDP-11使用的格式0x0A0B0C0D存储为0B 0A 0D 0C。还允许在0x01的表示中根本没有任何1个字节。

至于演员是否会返回int中的最低字节,它会。但是,C ++规范还没有很好地定义该字节的内容。

答案 2 :(得分:0)

您的char将具有与int相同的地址,这将是int中任何字节的最低地址。不知道这是否真的得到了保证,但在我曾经使用的每个系统上都是如此。