2016-12-02 62 views
5

我學習C語言中的指針下面的工作在我對有點糊塗瞭如何以下程序工作如何指針賦值和增量例如

int main() 
{ 
    int x=30, *y, *z; 
    y=&x; 
    z=y; 
    *y++=*z++; 
    x++; 
    printf("x=%d, y=%p, z=%p\n", x, y, z); 
    return 0; 
} 

輸出

x=31, y=0x7ffd6c3e1e70, z=0x7ffd6c3e1e70 

yz指向變量x的下一個整數地址。 我不能夠理解這個行工作

*y++=*z++; 

可有人請解釋我如何一行用C明白了嗎?

回答

4

*y++=*z++;實際上意味着

*y = *z; 
y += 1*(sizeof(int)); //because int pointers are incremented by 4bytes each time 
z += 1*(sizeof(int)); //because int pointers are incremented by 4bytes each time 

那麼尖銳的價值並沒有受到影響,指針加一。

+3

除子操作順序未預先確定外。 – pmg

+1

@pmg你是對的,你有沒有關於這種情況的例子。我喜歡閱讀這些。 – cokceken

+1

@pgm:我很確定這很重要:編譯器無論如何都可以重新排序最後的兩條語句。 – Bathsheba