可能重複:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)C-指針遞增邊緣情況和評價順序
下面片C-代碼打印出0和1。
#include <stdio.h>
int main(void) {
int array[] = {3,2,1,0};
int *p = array;
printf("%d\n", p++[*p++]);
printf("%d\n", *p);
return 0;
}
我知道p[i] == *(p + i)
,但在這種情況下,如果p表達式或i表達式是ev首先受騙。從我用clang
和gcc
得到的結果中,我看到i表達式首先被評估,但是我的教授說*(p + i)
的評估順序沒有在C中定義?
問題:這個程序的行爲是由任何標準定義還是依賴於編譯器?
顯然這個問題每天都會被問到一次... – Lundin 2012-02-16 14:59:44
@Lundin我可以發誓它更頻繁。 – 2012-02-16 15:35:10