簡介
參照《數組指針和指針數組》
================================================================================
一、多維數組的初始化
1、初始化
//幾種初始化
int ia[3][4]={
{0,1,2,3},
{4,5,6,7},
{8,9,2,1}
};
int ia2[3][4]={0,1,2,3,4,5,6,7,8,9,2,1};
int ia3[3][4]={{0},{2},{3}};
int ia4[3][4]={0,2,3,4};//省略了花括號,那麼這裏只初始化了第一行元素,其餘元素默認初始化爲0
2、多維數組的下標引用
const size_t rowsize=3;
const size_t colsize=4;
int ia[rowsize][colsize];
for(size_t i=0;i!=rowsize;i++)
{for(size_t j=0;j!=colsize;j++)
ia[i][j]=i*colsize+j;
}
二、數組指針和多維數組
- 與普通數組一樣,使用多維數組名時,實際上將其自動轉換爲指向該數組第一個元素的指針。
- 因爲多維數組其實就是數組的數組,所以由多維數組轉換而成的指針類型應該是指向第一內層數組的指針。
- 定義指向數組的指針和如何定義數組本身類似:首先聲明元素類型,後接(數組)變量名字和維數。 -
int ia[3][4];
int (*ip)[4]=ia; //因爲有(),優先級高,所以從左往右看,先是指針,指向數組的指針,指向數組ia的指針,元素表示(*a)[i]
ip=&ia[2];
三、指針數組
int *a[4]
//指針數組,用來存放指針的數組,數組a中的元素都爲int型的指針
//元素表示:*a[i] 和 *(a[i])是一樣的,因爲[]優先級高於*
//所以從右往左來看,首先是數組,把int *看成一個整體,是一個存放了int 型指針的數組
int main()
{
int c[4]={1,2,3,4};
int *a[4];//定義一個指針數組,數組裏面放的都是指針
int (*b)[4];// 定義一個數組指針,指向數組第一個元素的指針,還沒有初始化
b=&c; //使b 指向數組c,注意這裏不要寫成b=c!!!!
for(int i=0;i<4;i++)
a[i]=&c[i]; //將數組c中元素地址賦給數組a
cout<<*a[1]<<endl;//輸出2
cout<<(*b)[2]<<endl;//因爲先求*b,而*b的值時c,所以等同於c[2],所以輸出3就對
return 0;
}