天天看点

c语言 二维数组名表示什么,C语言二维数组名问题

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;

}