简介
参照《数组指针和指针数组》
================================================================================
一、多维数组的初始化
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;
}