一般而言,對指針進行加1操作,得到的將是下一個元素的地址,一個類型為T的指針移動,是以sizeof(T)為移動單位。
#include<stdio.h> int main() { int a[5]={1,2,3,4,5}; int b[5]; int *ptr=(int*)(&a+1); //&a+1的單位是int(*)[5] printf("%d\n%d\n",*(a+1),*(ptr-1)); printf("sizeof(b)=%d\n",sizeof(b)); printf("sizeof(&b)%d\n",sizeof(&b)); return 0; } //程序輸出結果: //2 //5 //sizeof(b)=400 (b數組的大小) //sizeof(&b)=8 //64位系統
a是數組首地址a[0]的地址,&a是對象(數組)首地址;
a+1是數組下一個元素的地址,即a[1];
而&a+1是下一個對象的地址,即a[5]。
sizeof(b) 是 數組的空間大小,即 5 * 4 = 20;
sizeof(&b),&b是一個指向int型數據的指針,在64位系統中,指針的大小是8,所以sizeof(&b) = 8
在C++中,數組的下標並非不可以為負數,當數組的下標為負值時,它表示的意思是從當前地址向前尋址,即為當前地址減去sizeof(類型)的地址值。
