我試圖在c中的for循環播放數組初始化。在C循環(鏗鏘VS海灣合作委員會)的數組值
這裏是我試過的程序:
#include<stdio.h>
int main(){
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
int br[10]={0};
printf("%d\n", br[-1]);
}
}
return 0;
}
這段代碼的結果時,用gcc編譯如下:
0 1 2 0 1 2 0 1 2
時鏗鏘編譯同樣的程序,結果是:
0 0 0 0 0 0 0 0 0
如果我通過在開始第二個lo之前進行數組初始化來調整程序OP:
#include<stdio.h>
int main(){
for(int i=0;i<3;i++){
int ar[10]={0};
for(int j=0;j<3;j++){
int br[10]={0};
printf("%d\n", br[-1]);
}
}
return 0;
}
我得到的輸出0 0 0 0 0 0 0 0 0
對GCC和鐺
誰能解釋究竟是什麼在這裏發生的事情,當我嘗試,爲什麼這些結果顯示了這兩個不同的訪問負指數編譯器(gcc和clang)以及爲什麼在第二次循環改變所有內容之前另一個數組初始化。
'BR [-1]'是[未定義行爲(https://en.wikipedia.org/wiki/Undefined_behavior)......這就是 – LPs
我不這麼認爲。我認爲這與內存分配有關。 – satishdd
不,它是UB,純粹而簡單。編譯器保留吃你的貓的權利。 – Bathsheba