亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在c語言里數組長度是固定的么(不討論柔性數組)比如int a[5]={0,1,2,3,4}

在c語言里數組長度是固定的么(不討論柔性數組)比如int a[5]={0,1,2,3,4}

白板的微信 2018-07-10 15:34:37
如上定義以后,為什么 a[5]=5;這樣賦值以后也是可以的,但是用sizeof(a)得到的還是20呢,可以給a[5]賦值這是不是代表它長度可變,,,雖然數組在匯編里就是一個地址然后往后不斷偏移偏移,,可是老師講數組都一再強調數組下標不能越界……往解答一二
查看完整描述

2 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

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

查看完整回答
反對 回復 2018-07-19
?
森欄

TA貢獻1810條經驗 獲得超5個贊

數組長度是固定的。之所以可以a[5]=5是因為,C語言不對下標的合法性(是否越界)做出檢查。這么做會造成什么后果(沒事,還是會侵犯另一個變量,或者訪問違例),是不可預料的。

查看完整回答
反對 回復 2018-07-19
  • 2 回答
  • 0 關注
  • 1295 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號