求解答謝謝
關于數組求值,求解答謝謝
Single丶love
2016-08-14 23:13:37
TA貢獻17條經驗 獲得超13個贊
int?a[]={5,15,34,54,12,2,52,72};???//創建一個整形數組,大小為8個整形
int?*p=&a[5];??????????????????????//創建一個指針變量p,將數組a的第六個值所在的地址賦值給p,*p=2
printf("%d",*p[-2]);???????????????//p[-2]等價于(p+(-2)),此時指向p地址向前數兩位的a[3]。值為54.TA貢獻79條經驗 獲得超48個贊
? ? ? ? ??如果你在你的程序里再有下面的定義語句的話 int *p=&a[3]; 那你使用 p[-2]就完全沒問題了,因為它表示 a[1].
?? ? ? ? 如果你定義了一個數組后,比如 int a[5]; 在內存中會為這個數組分配5個存儲單元,此時如果你用這5個單元是完全沒問題的,因為這5個已經被你申請了,而其他沒被申請的單元是不能隨便用的,比如 a[-2]是表示 a[0]前的兩個單元(每個大小編譯系統會根據你聲明的數組元素的類型確定,在這個問題中每個單元都是 int型的),如果碰巧這個單元沒被分配給其他變量時你使用會沒有問題,但是如果已經被其他變量占據,那此時你使用就會出現問題,所以書上要求不能為負的是正確的,你的使用沒問題是巧合。即使偶爾可以使用,也不要這樣做,第一這樣做沒什么意義,第二會使程序存在潛在的隱患。
舉報