2 回答

TA貢獻(xiàn)17條經(jīng)驗(yàn) 獲得超13個(gè)贊
int?a[]={5,15,34,54,12,2,52,72};???//創(chuàng)建一個(gè)整形數(shù)組,大小為8個(gè)整形 int?*p=&a[5];??????????????????????//創(chuàng)建一個(gè)指針變量p,將數(shù)組a的第六個(gè)值所在的地址賦值給p,*p=2 printf("%d",*p[-2]);???????????????//p[-2]等價(jià)于(p+(-2)),此時(shí)指向p地址向前數(shù)兩位的a[3]。值為54.

TA貢獻(xiàn)79條經(jīng)驗(yàn) 獲得超48個(gè)贊
? ? ? ? ??如果你在你的程序里再有下面的定義語句的話 int *p=&a[3]; 那你使用 p[-2]就完全沒問題了,因?yàn)樗硎?a[1].
?? ? ? ? 如果你定義了一個(gè)數(shù)組后,比如 int a[5]; 在內(nèi)存中會(huì)為這個(gè)數(shù)組分配5個(gè)存儲(chǔ)單元,此時(shí)如果你用這5個(gè)單元是完全沒問題的,因?yàn)檫@5個(gè)已經(jīng)被你申請了,而其他沒被申請的單元是不能隨便用的,比如 a[-2]是表示 a[0]前的兩個(gè)單元(每個(gè)大小編譯系統(tǒng)會(huì)根據(jù)你聲明的數(shù)組元素的類型確定,在這個(gè)問題中每個(gè)單元都是 int型的),如果碰巧這個(gè)單元沒被分配給其他變量時(shí)你使用會(huì)沒有問題,但是如果已經(jīng)被其他變量占據(jù),那此時(shí)你使用就會(huì)出現(xiàn)問題,所以書上要求不能為負(fù)的是正確的,你的使用沒問題是巧合。即使偶爾可以使用,也不要這樣做,第一這樣做沒什么意義,第二會(huì)使程序存在潛在的隱患。
- 2 回答
- 0 關(guān)注
- 1436 瀏覽
添加回答
舉報(bào)