1. 程式人生 > >C++二維陣列

C++二維陣列

如果陣列的元素又是陣列,則稱為二維陣列。例如

int a[3][4] = {
{0, 1, 2, 3}
, {4, 5, 6, 7}
, {8, 9 ,10 ,11}
};
可以將a看成一個數組,這個陣列中有3個元素,每個元素又是一個包含4int的陣列。

1 二維陣列的識別符號

當給出二維陣列名而沒有方括號時,可以將其看作是二維陣列的識別符號。該識別符號不是左值,不能給它賦值,可以將其看作是陣列的起始地址,即陣列中第一個元素的地址。

2 a[x]的含義

x是非負整數。在之前提到,二維陣列可以看成是陣列的陣列,所以a[0]表示二維陣列中的第一個元素,a[1]表示二維陣列中的第二個元素,而二維陣列中的元素型別還是素組,所以

a[0]表示陣列{0, 1, 2, 3}的地址,a[1]表示陣列{4, 5, 6, 7}的地址。

int a1 = *(a[0]+1);
int a2 = *(a[1]+2);
此時,a1的值是1a2的值是6,如圖1所示。

 

1 a[x]的含義

3 a+x的含義

x是非負整數。a是指向其第一個元素,則a+1指向其第二個元素,a+2指向其第三個元素,如圖2所示。


2 a+x的含義

對於二維陣列aaa[0]的值都是表示陣列a的第一個元素的地址。而aa+1a+2的型別都是二維陣列,所以a+1(a+1)[0]的值都是表示a+1的第一個元素的值。

int b1 = *(a+1)[0];
int b2 = *(a+1)[1];
此時b1的值是4b2的值是8

4 (a+x)[y]的含義

xy都是整數,在“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*