-1

我的问题是为什么第二个 printf 显示所有相同的地址,但第四个显示不同的数字?我在英特尔的 gcc 4.8.2 下编译它,在一些 Linux 发行版上是 64 位。

前 2 个 pritfs 应该打印内存地址(不计算第一个数字,它是第一行中的 int 值。

第二个和第三个从第一个和第二个 printfs 的指针给定的内存中的位置打印 char 值。

以下代码

#include<stdio.h>

int main()
{
    char *ptr;
    int numer;

    numer = 0xAABBCCDD;
    ptr=&numer;

    printf("---\n%x\n %x %x %x %x\n",
    numer,
    (ptr),
    (ptr++),
    (ptr++),
    (ptr++)
    );
    ptr=&numer;


    printf("---\n%x\n %x %x %x %x\n",
    numer,
    (++ptr),
    (++ptr),
    (++ptr),
    (ptr)
    );

    ptr=&numer;

    printf("---\n%x\n %x %x %x %x\n",
    numer,
    *(ptr),
    *(ptr++),
    *(ptr++),
    *(ptr++)
    );
    ptr=&numer;


    printf("---\n%x\n %x %x %x %x\n",
    numer,
    *(++ptr),
    *(++ptr),
    *(++ptr),
    *(ptr)
    );


    return 0;
}       

产生输出:

/a.out                                                                                                                         
---
aabbccdd
 53209c77 53209c76 53209c75 53209c74
---
aabbccdd
 53209c77 53209c77 53209c77 53209c77
---
aabbccdd
 ffffffaa ffffffbb ffffffcc ffffffdd
---
aabbccdd
 ffffffaa ffffffbb ffffffcc ffffffdd
4

1 回答 1

0

您需要了解序列点。这是描述更改何时对用户“可见”的 c 语义的一部分。

于 2013-10-26T19:24:10.827 回答