請問你的陣列今天溢位了嗎?
阿新 • • 發佈:2018-12-19
相信每一位程式設計的老司機剛學陣列的時候都會有陣列越界的經歷,提起陣列越界,那就不得不說“棧”了,下面先來介紹一下棧吧! 話不多說,先上圖: 特別強調,棧的棧底地址大,棧頂的地址小,知道了這個東西,對於理解越界就簡單多了。 當我們定義一個數組時,陣列就是按序放入棧中的,如下圖所示: 這就是將一個數組放入一個棧中 ,棧頂放地址小的,棧底放地址大的,以此類推 此時上述程式碼執行結果就是將i從0輸出到9; 如果將程式碼改一下:
#include <stdio.h> int main() { int i; int arr[10]; for(i=0;i<=10;i++) { arr[i]=0; printf("%d\n",i); } }
此時是編譯器就會報錯,原因就是陣列越界了,很明顯,陣列只有0-9十個下標,而for迴圈裡面i代表的下標是從0~10有十一個,所以此時就會發生越界,編譯器也就會報錯,所以,為了避免越界,每次迴圈判斷陣列的時候一定要弄清陣列的下標,在做迴圈。 總結一下,陣列的資料是存放在棧當中的,遵循“先進後出”的規則,特別提醒陣列的下標是從0開始的,各位小夥伴們在使用的時候一定要注意哦,好了今天就到這裡,下期再見吧!