2 回答

TA貢獻2011條經(jīng)驗 獲得超2個贊
C語言里面,所謂的長度固定,是因為分配給它的內(nèi)存只有5個int的空間,
1.你的電腦和編譯器上,一個int應(yīng)該是4個字節(jié),5個不就是20個字節(jié)的內(nèi)存嘛。但是5個元素的數(shù)組下標只能到4吧,
a[5]豈不是別人家的內(nèi)存空間么?
2.數(shù)組名a就是一個不可變的指針(a是指針,但是a不能被賦值,比如a++), a永遠是數(shù)組的首地址(一生一世,永世不移)
但是通過指針方式 *(a+3)這樣子是闊以的,因為a+3并沒修改a的值啊
3.對于指針,有一種運算符叫[] , []中的數(shù)字叫做偏移量,根據(jù)類型不同,每次偏移的距離不一樣,比如int類型,你的int是32位(4字節(jié)),
那么a[0]就是從首地址向后偏移0個字節(jié)的內(nèi)容,也就是首地址的內(nèi)容
4. a[5]=26; 是指給從a(首地址開始),向后偏移5個int的字節(jié)數(shù),如果你的數(shù)組定義的時候是5個元素,下標最大是4,a[4]是最后一個
C語言訪問a[5]不會報錯,但是你隨便動用別人家的內(nèi)存地址,就不怕系統(tǒng)不穩(wěn)定,系統(tǒng)崩潰么?
這一塊內(nèi)存空間是空閑的算運氣好,如果不空閑呢? 最好不要隨便動別人家的內(nèi)存嘛,你申請的內(nèi)存你可以改,別人家的不要動。

TA貢獻1810條經(jīng)驗 獲得超5個贊
數(shù)組長度是固定的。之所以可以a[5]=5是因為,C語言不對下標的合法性(是否越界)做出檢查。這么做會造成什么后果(沒事,還是會侵犯另一個變量,或者訪問違例),是不可預料的。
- 2 回答
- 0 關(guān)注
- 1305 瀏覽
添加回答
舉報