二維陣列及多維陣列的指標總結
阿新 • • 發佈:2019-01-07
一.二維陣列的結構
看下一個二維陣列int array[2][3]={{1,2,3},{4,5,6}};的記憶體儲存形式:
二維陣列是巢狀定義的 ,這個二維陣列就是由兩個一維陣列array[0]和array[1]組成的,
array[0]:是第一個一維陣列的陣列名,這個一維陣列是{1,2,3};
array[1]:是第二個一維陣列的陣列名,這個一維陣列是{4,5,6};
array[0][0]:是第一個一維陣列的陣列的第一個元素{1};
array[0][1]:是第一個一維陣列的陣列的第二個元素{2};
array[0][2]:是第一個一維陣列的陣列的第三個元素{3};
上面array[0]、array[1]就是這個一位陣列的陣列名,相當於a[3]={1,2,3}這個陣列的a;
array陣列的元素型別為: int (*)[3]型別
array[0]陣列的元素型別為: int *型別
array[1]陣列的元素型別為: int *型別
對於陣列int array[N];(N是一常量)。陣列名array是一指向陣列首元素的常量指標(也就是說,不可再指向別的儲存單元),而&array是一指向整個陣列的指標。所以:
array: 是指向int (*)[3]型別的指標;//指向組成自己子元素型別的首元素(自己的子元素是一維陣列,即指向一維陣列型別)
array[0]:是指向int *型別的指標; //指向組成自己子元素型別的首元素(自己的子元素是int型,即指向int型,int *)
array[1]:是指向int *型別的指標; //指向組成自己子元素型別的首元素(自己的子元素是int型,即指向int型,int *)
&array: 是指向 int (*)[2][3]型別的指標;//指向自身陣列型別的指標(自身型別是二維陣列)
&array[0]:是指向int (*)[3]型別的指標; //指向自身陣列型別的指標(自身型別是一維陣列)
&array[1]:是指向int (*)[3]型別的指標; //指向自身陣列型別的指標(自身型別是一維陣列)
同理三維陣列:
int Sarray[2][2][3] = {
{ { 1, 2, 3 }, { 4, 5, 6 } },
{ { 7, 8, 9 }, { 3, 6, 8 } }
};
上述三維陣列:由兩個二維陣列組成,每個二維陣列又由兩個一位陣列組成,
Sarray: 是指向 int (*)[2][3]型別的指標;//指向組成自己子元素型別的首元素(自己的子元素是二維陣列,即指向二維陣列型別)(有兩個二維陣列組成,這兩個二維陣列名為Sarray[0],Sarray[1])
Sarray[0]:是指向int *[3]型別的指標; //指向組成自己子元素型別的首元素(自己的子元素是一維陣列,即指向一維陣列型別)(有兩個一維陣列組成,這兩個一維陣列名為Sarray[0][0],Sarray[0][1])
Sarray[1]:是指向int *[3]型別的指標; //指向組成自己子元素型別的首元素(自己的子元素是一維陣列,即指向一維陣列型別)(有兩個一維陣列組成,這兩個一維陣列名為Sarray[1][0],Sarray[1][1])
Sarray[0][0]:是指向int *型別的指標; //指向組成自己子元素型別的首元素(自己的子元素是int型,即指向int型別)(有三個int型組成,這三int型數為Sarray[0][0][0],Sarray[0][0][1],Sarray[0][0][2])
Sarray[0][1]:是指向int *型別的指標; //指向組成自己子元素型別的首元素(自己的子元素是int型,即指向int型別)(有三個int型組成,這三int型數為Sarray[0][1][0],Sarray[0][1][1],Sarray[0][1][2])
Sarray[1][0]:是指向int *型別的指標; //指向組成自己子元素型別的首元素(自己的子元素是int型,即指向int型別)(有三個int型組成,這三int型數為Sarray[1][0][0],Sarray[1][0][1],Sarray[1][0][2])
Sarray[1][1]:是指向int *型別的指標; //指向組成自己子元素型別的首元素(自己的子元素是int型,即指向int型別)(有三個int型組成,這三int型數為Sarray[0][1][0],Sarray[0][1][1],Sarray[0][1][2])
同理&Sarray、&Sarray[0]、&Sarray[1]、&Sarray[0][0]、&Sarray[0][1]......