2013-10-26 112 views
-1

我的問題是爲什麼第二個printf顯示所有相同的地址,但第四個顯示不同的數字? 我在intel上編譯了gcc 4.8.2,在一些Linux發行版上編譯了64位。preincremented字符指針都增加後指向相同的地址?

首先2個pritfs應該打印的存儲器地址(不計算第一數量,其是在第一線int值。

第二和第三從發生在由指針FOM第一和第二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 

回答

0

您需要了解sequence points。這是c語義的一部分,它描述了何時更改對用戶是「可見的」。