2011-05-28 169 views
2

可能重複:
C programming: is this undefined behavior?
Is this program having any sequence point issues ?C指針和功能

嗨,

我運行下面的程序

void print(int *a, int *b, int *c, int *d, int *e) 
{ 

    printf("\n %d %d %d %d %d",*a,*b,*c,*d,*e); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    static int arr[] = {97,98,99,100,101,102,103,104}; 
    int *ptr=arr+1; 
    print(++ptr,ptr--,ptr,ptr++,++ptr); 
    getchar(); 
    return 0; 
} 

我想我會得到99 99 98 98 100作爲輸出,但我得到100 100 100 99 100作爲輸出。我不明白爲什麼。與++或 - (pre或postfix)運算符一起使用時,指針的行爲與普通變量的行爲不同。您能否幫我理解程序是如何工作的

+0

以前在SO上詢問過的類似問題... – 2011-05-28 05:33:09

回答

5

您正在閱讀並修改ptr多次沒有序列點。這是未定義的行爲。編譯器可以發出任何感覺的代碼。不要這樣做。

請注意,函數參數的求值順序未定義,所以即使它的定義良好,您的print聲明也不一定輸出您認爲的結果。

看到這個問題Is this undefined behavior有類似的問題。

+0

請參閱http://en.wikipedia.org/wiki/Sequence_point中的第4點。 – mtrw 2011-05-28 05:37:57