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

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

C中是否允許負數組索引?

C中是否允許負數組索引?

C C++
茅侃侃 2019-07-12 09:43:04
C中是否允許負數組索引?我只是在讀一些代碼,發現那個人正在使用arr[-2]對象之前的第二個元素。arr,就像這樣:|a|b|c|d|e|f|g|        ^------------ arr[0]          ^---------- arr[1]    ^---------------- arr[-2]這是允許的嗎?我知道arr[x]是相同的*(arr + x)..所以arr[-2]是*(arr - 2),這似乎沒問題。你認為如何?
查看完整描述

3 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

這是正確的。摘自C99第6.5.2.1/2號編:

下標算子[]的de?nition是E1[E2]與(*(E1)+(E2)完全相同。

沒有魔法。這是1-1等價物。與往常一樣,當取消引用指針(*)時,您需要確保指針指向的是有效地址。


查看完整回答
反對 回復 2019-07-12
?
DIEA

TA貢獻1820條經驗 獲得超3個贊

只有在下列情況下才有效arr指向數組中的第二個元素或后一個元素的指針。否則,它將無效,因為您將訪問數組邊界之外的內存。因此,例如,這是錯誤的:

int arr[10];int x = arr[-2]; // invalid; out of range

但這沒什么大不了的:

int arr[10];int* p = &arr[2];int x = p[-2]; // valid:  accesses arr[0]

然而,使用負值下標是不尋常的。


查看完整回答
反對 回復 2019-07-12
  • 3 回答
  • 0 關注
  • 733 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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