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;
}