C語言陣列越界問題

2021-09-27 13:57:25 字數 507 閱讀 7548

先看下面這段**

int i =0;

int arr[10]

=;arr[12]

=5;printf

("%d"

, i)

;

按照通常的理解,陣列arr的訪問越界了,程式應該報錯才對,可是程式不僅沒報錯,反而輸出了5,這說明i的位址和arr[12]的位址是相同的。類似的還有下面的**,這段**會形成死迴圈。

int i =0;

int arr[10]

=;for(i =

0; i <=

12; i++

)

通過從網上查閱資料發現,這是由於區域性變數都是分配在棧中的,而且是從高位址向低位址生長,因此上面的**會先在高位址為i分配空間,再在比i的位址低的區域為陣列arr分配空間。

至於為什麼恰好arr[12]的位址與i的位址相同,而不是arr[10]或者arr[11],我猜想這可能是因為c語言的某種機制吧。

陣列越界問題

c陣列越界問題 2010 07 23 22 23 include stdio.h define len 10 int main return 0 問題 為什麼輸入11個字元越界了都不會出錯?但是輸入13個字元卻出現錯誤?補充答案 在c語言中,很容易出現陣列越界問題。上面程式中定義了長度為10的int...

陣列越界問題

今天遇到了乙個問題 輸入一行文字,找出其中的大寫字母,小寫字母,空格,數字以及其他字元各有多少?要求用指標變數 我的答案 include void main int st char t,int o else if t n 97 t n 122 else if t n 48 t n 57 else i...

陣列越界問題

首先一點是明白陣列是有固定的大小的,然後是陣列的下標是從0開始到定義的陣列size 1。陣列越界常發生在非法索引訪問陣列,非法是指索引值為負值或大於等於陣列大小,這裡最常迷惑人的是大於等於陣列大小。首先,因為在往陣列中插入資料時,陣列此時的大小是等於陣列中資料長度的,並不是你之前的規定的值。那之前規...