C++里,1[p]這麼訪問為什麼可以這麼寫?

今天在歷史遺代碼里看到了這麼類似1[p](p是一個指向int數組的指針)的訪問,很彆扭,也很懵,寫了兩行測試代碼,發現是可以的,希望知道為什麼可以這麼寫?這麼寫的可能原因是什麼?多謝

測試代碼如下:

#include&
int main() {
int* p = new int[4];
p[0]=0;
p[1]=1;
p[2]=2;
p[3]=3;
printf("%d
",1[p]);

return 0;
}


a[b] 定義為 *((a)+(b))。


a[b]在設計之初就是對彙編語言中:寄存器+偏移量的引用方式的高級別實現

所以a不一定要是數組的首地址,a[b]的意義也僅僅是,從a這個地址開始,取它後面第b個元素


學了彙編就知道了,其實折騰了那麼一大圈就是要定址。。。。

彙編可以學一學,有助於更好的理解C語言。

PS:感覺應該有delete......


a[i]=*(a+i)=*(i+a)=i[a]


不要說1[p]可以這麼寫,隨便多少P都可以

1[p]、p[1]、*(p+1)它們是等價的


[ ]這貨根本就是個語法糖。。。。。。


推薦閱讀:

C++ Primer 看不懂 怎麼辦?
c語言中int main()主函數的結尾為何有時有return 0有時沒有?
C語言中case後真的不能跟範圍?
C語言里如何按需生成函數指針數組?

TAG:C編程語言 | C | 編譯原理 | 編譯器 |