0

有人可以解释以下程序的输出:

int main()
{
    int i=512;
    char *c=(char*)&i;
    c[0]=1;
    cout<<"i is:"<<i<<endl;

    return 0;
}

输出为:513

4

3 回答 3

3

您的程序的输出未指定。在实践中,这取决于平台的字节顺序和int类型的宽度。

您的平台是little-endian。为简单起见,我们假设它int是 32 位宽。

512100x00000200十六进制的。这存储在内存中

00 02 00 00

您的代码将第一个字节修改为01. 这会将 更改int0x00000201,即513十进制。

于 2013-10-30T10:55:31.203 回答
2

该程序表现出未指定的行为,具体取决于机器的体系结构。要对输出进行预测和推理,需要了解编译器和目标架构。

于 2013-10-30T10:55:23.007 回答
2

解释:

int main()
{
    /* Creates int equal to 512 */
    int i=512;

    /* Creates a char pointer, and points this at i */
    char *c=(char*)&i;

    /* Overwrites the lowest byte of the 4 byte int with 1 */
    /* This sets the lowest bit of the int, which adds 1 */
    c[0]=1;

    /* Displays the updated int */
    cout<<"i is:"<<i<<endl;

    return 0;
}

究竟哪一部分 int 被覆盖取决于您正在编译的平台的字节序。鉴于 513 的最终结果,您的系统显然是 little-endian。

于 2013-10-30T10:57:04.933 回答