最近有同學發(fā)來這樣一段代碼,并提出一個問題,數(shù)組的下標為什么可以是負數(shù)?
#includeint main() { const char *s = "helloworld"; const char *p = s + 5; printf("%c ", p[-2]); return 0; }
關(guān)鍵是這段代碼,編譯運行都很順利。
首先需要搞懂下標的作用是什么,準確的說,它是個偏移量。
比如 a[3],數(shù)組名 a 作為數(shù)組首元素地址,下標 3 表示從這個地址開始向后移動 3 個元素,至于具體是幾個字節(jié),得看什么元素。
所以 a[3] 完全等價于 *(a + 3),甚至把代碼寫成 3[a] 編譯器也沒意見,表示的都是一個意思。
如果把數(shù)組下標寫成負數(shù),就表示向前偏移。
a[-1] 就是向前偏移一個元素,很顯然,前面這塊內(nèi)存不屬于數(shù)組,不能這樣使用,所以很少見到數(shù)組下標是負數(shù)的。
但是對于這樣精心設(shè)計過的代碼,保證內(nèi)存不會越界的情況下,完全沒有問題。
s 指向了字符 h,p 指向了字符 w,p[-2] 就是往前數(shù)兩個元素,所以打印出來的就是 l。
-
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68603 -
數(shù)組
+關(guān)注
關(guān)注
1文章
417瀏覽量
25945
原文標題:數(shù)組的下標可不可以是負數(shù)
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論