天天看點

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;

}