C++里,1[p]這麼訪問為什麼可以這麼寫?
01-06
今天在歷史遺代碼里看到了這麼類似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語言里如何按需生成函數指針數組?