cut the crap,看圖:#include
int main(){
int a[] = {1,2,3};
printf("a[0]=%d\n", a[0]);
printf("*(a+0)=%d\n", *(a+0));
printf("a[1]=%d\n", a[1]);
printf("*(a+1)=%d\n", *(a+1));
return 0;
}
array的index access在C裡隻是對指針操作的一個文法糖。a[n]完全等價于*(a+n)
回到你的問題。C語言裡int a[10]的話,a是一個指針指向a[0]的指針
C語言裡int a[2][3]的話,a[0]是一個指向a[0][0]的指針,a[1]是一個指向a[1][0]的指針
在你的代碼裡,int a[2][3]*a指向a[0][0]這個int
a指向a[0] = {1, 2, 3}這個array。隻不過在C裡面,array的位址就是array第一個元素的位址,是以在這裡a = a[0] = a[0][0]
a是*int[3]的指針,對其進行+1操作,記憶體指針往後移動sizeof(int[3])個位置
*a是int指針,對其進行+1操作,記憶體指針往後移動sizeof(int)個位置
你可以運作下面代碼測試下#include
int main(){
int a[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
printf("%p\n", a);
printf("%p\n", a+1);
printf("%p\n", (*a+1));
return 0;
}