2017-02-08 28 views
4
#include <stdio.h> 
int main() { 
    int x[] = {2, 3, 1, 5, 6, 9}; 
    int j, i, s; 
    for (i=0; i<6; i++){ 
    if (x[i] % 2 == 1){ 
     break; 
    } 
    } 

    printf("%d", i); 
    for (j=5; j>1; j--){ 
    x[j+1] = x[j]; 
    } 
    printf("%d", i); 

    return 0; 
} 

第一個printf打印1而另一個printf打印9。正如你所看到的,我沒有改變i。爲什麼打印9?錯誤的C程序打印

回答

10

j5時,請參閱x[j+1]。這超出了數組的範圍。因此

你的代碼的行爲是不確定的。 (有趣的是,你的代碼的行爲與x[6]等效於j,並x[7]i和分配一個特定的順序,但依賴於任何的是一致的。)

+1

如果我錯了糾正我, ;因此,c中的任何一種未定義的行爲都會導致程序中無法解釋的變化? –

+1

@JamesGroon嗯,我的意思是技術上ub被援引將是解釋,但是。 – George