作者OpenSkyWin (雞飛城市)
看板C_and_CPP
標題[問題] 為什麼超出陣列範圍的變數還有位址呢
時間Tue May 12 21:52:43 2009
今天看到一個code
int a[3];
int *ptr;
然後下面的for迴圈又有
for(;ptr<&a[3];ptr++)
條件判斷用到了&a[3]我就覺得奇怪
為什麼這樣還能過
置底的十誡也說不要去存取超出陣列範圍的大小
因為效率考量,所以compiler不會去檢查
可是想不透為什麼我宣告a[3],超出陣列範圍的a[3]、a[4]、a[5]、…
這些陣列還會有address呢??
而不是直接配一個固定大小的a[0]~a[2]
thanks!!
--
我就像一隻在天空自由傲翔的老鷹
看盡世間男女分分合合喜怒哀樂恩怨情仇...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.97.37
1F:→ iamivers0n:呃 就說了不會檢查了阿 所以會看到不屬於你的東西 05/12 21:55
2F:→ iamivers0n:你可以去寫他看看 有機會掛掉 05/12 21:55
3F:推 godisme:看看會不會改到OS的記憶體XDD 05/12 21:57
4F:→ james732:a[3] 就只是 a[0] 的位置再往後移三個而已 05/12 21:57
5F:推 ledia:配置的意思是, 縣政府說中正路一號到五號是你家的 05/12 22:29
6F:→ ledia:這不代表中正路沒有七號, 也不代表你不能闖進七號的房子裡 05/12 22:29
7F:→ ledia:只是你闖進去亂搞一通, 很有可能會被警察當闖空門抓走 05/12 22:30
8F:推 stonehomelaa:被抓去關就回不了家 05/12 22:32
9F:推 IamCoolKing:推5樓到8樓 XD 05/12 22:35
10F:推 VictorTom:推l大的解釋, 真是淺顯易懂:) 05/12 22:43
11F:推 legnaleurc:不要dereference就沒事 05/12 23:00
12F:→ james732:ledia的解釋很貼切 XDDD 05/12 23:03