preincremented char指针在递增后都指向相同的地址?

时间:2013-10-26 14:10:34

标签: c pointers gcc casting printf

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

前两个pritfs应该打印内存地址(不计算第一行的第一个数字。

第二个和第三个从第1和第2个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

1 个答案:

答案 0 :(得分:0)

您需要了解sequence points。这是c语义的一部分,描述了更改对用户“可见”的时间。