例1:
int aa[3][2]={
{1,2},
{3,4},
{5,6}
};
printf("%d\n",aa[0][0]);
例2:
char bb[3][4]={
"ni",
"wo",
"ta"
};
printf("%s\n",bb[0]);
注意:二维数组名解引用才是一维数组名,才是指向一维数组的指针。
定义字符类型二维数组时,个数不足列数也没关系,会自动补‘\0’
例3:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int i,(*b)[4];
for(i=0;i<2;i++)
{
b=a+i;
printf("%d\n",*(b[i]+1));
}
答案是:2,10
小结:二维数组名指向的是整个一维数组,二维数组名解引用(取*或者[])得到的是一维数组名,也即为指向一维数组首元素的指针。
取二维数组元素方法如下:
a[2][3]
*(a[2]+3)
(a[2]+3)[0]
b=a+1;
b[1][3]
*(b[1]+3)
(b[1]+3)[0]
*((a+2)[0]+3)
((a+2)[0]+3)[0]
*(*(a+2)+3)
(*(a+2)+3)[0]
二维数组的初始化:
char ch[2][3];
memset(ch,0,2*3);
跟一维数组的初始化一样!!!!
总结:
二维数组名指向的是整个一维数组(整个二维数组的第一个一维数组)