2015-07-03 82 views
-1

所以我正在學習C語言,我有Java和Python的經驗,這是一件非常奇怪的事情。數組越界但沒有錯誤?

當我運行該代碼時,輸​​出爲Hello7

#include <stdio.h> 

int main() 
{ 
    int a[1]; 
    a[1]=1; 
    a[2]=2; 
    a[3]=7; 
    printf("Hello%d",a[3]); 
} 

但如何是GCC能夠打印出Hello7如果陣列的最大尺寸爲1?

+2

這是一個未定義的行爲(https://en.wikipedia.org/wiki/Undefined_behavior) – Jack

+0

因爲在這種情況下語言不會陷入限制。這是未定義的行爲。如果因爲您訪問的數組超出其定義而碰巧工作 - 它可能不會在昨天工作。令人高興的是,目前在內存使用方面沒有明顯的衝突。 –

+0

@Paulpro我不相信,你能否張貼你的結果截圖? –

回答

2

C數組不超過一系列連續的內存位置。當你要求C給你一個來自數組的特定索引時,它會從數組的起始處開始並添加必要的字節數以獲得適當的內存位置。它不知道陣列應該有多大;在C中,作爲程序員的工作留給你。