C++二維陣列
阿新 • • 發佈:2019-01-08
如果陣列的元素又是陣列,則稱為二維陣列。例如
int a[3][4] = {
{0, 1, 2, 3}
, {4, 5, 6, 7}
, {8, 9 ,10 ,11}
};
可以將a看成一個數組,這個陣列中有3個元素,每個元素又是一個包含4個int的陣列。
1 二維陣列的識別符號
當給出二維陣列名而沒有方括號時,可以將其看作是二維陣列的識別符號。該識別符號不是左值,不能給它賦值,可以將其看作是陣列的起始地址,即陣列中第一個元素的地址。
2 a[x]的含義
x是非負整數。在之前提到,二維陣列可以看成是陣列的陣列,所以a[0]表示二維陣列中的第一個元素,a[1]表示二維陣列中的第二個元素,而二維陣列中的元素型別還是素組,所以
int a1 = *(a[0]+1);
int a2 = *(a[1]+2);
此時,a1的值是1,a2的值是6,如圖1所示。
圖1 a[x]的含義
3 a+x的含義
x是非負整數。a是指向其第一個元素,則a+1指向其第二個元素,a+2指向其第三個元素,如圖2所示。
圖2 a+x的含義
對於二維陣列a,a和a[0]的值都是表示陣列a的第一個元素的地址。而a、a+1和a+2的型別都是二維陣列,所以a+1和(a+1)[0]的值都是表示a+1的第一個元素的值。
此時b1的值是4,b2的值是8。int b1 = *(a+1)[0]; int b2 = *(a+1)[1];
4 (a+x)[y]的含義
x和y都是整數,在“3 a+x的含義”中提到,a+x的含義是指向二維陣列的第x-1個元素,而a+x的型別仍然是二維陣列,所以(a+x)[y]的表示二維陣列中第y-1個元素。
int b3 = *((a+1)[0]+1);
b3的值是5,如圖3所示。
圖3 (a+x)[y]的含義
4 定義指向陣列的指標
定義陣列的指標與定義陣列類似,首先宣告元素型別,之後是變數名字和維數。因為定義的型別是指標,所以需要在識別符號前加上*。
int (*ip)[4] = &a[2];
需要注意的是,方括號[]的優先級別高於*,所以在定義陣列的指標時,必須加上小括號來設定優先順序。如果不加入小括號設定優先順序int *ip[4];
此時ip表示一個數組,該陣列中包含4個元素,每個元素的型別是int*。