二维数组
int a[2][3]={1,2,3,4,5,6};
printf(“%d %d\n”,a[0][0],a[1][2]); //索引从0开始
赋值方式
int a[2][3]={{1,2,3},{4,5,6}}; //按行进行赋值
int a[][3]={1,2,3,4,5,6}; //可以省略行数
for(; ; )
for(; ; )
scanf(“%d”,a[i][j]);
int a[2][]={1,2,3,4,5,6}; //错误,只有最左边的维度可以省略。
二维数组的计算问题
行数 * 列数=元素个数
行数*列数 *sizeof(数据类型)=空间大小(sizeof(a);
printf(“%d\n”,sizeof(a));
首地址问题
int a[2][3]={1,2,3,4,5,6};
printf(“%p %p\n”,a,&a[0][0]);
printf(“%p %p\n”,a+1,&a[1][0]);
a:第一行首地址
a+1:第二行首地址
初始化
● 全部初始化
int a[2][3]={1,2,3,4,5,6};
int a[2][3]={{1,2,3},{4,5,6}};
● 部分初始化 未初始化部分,值为0
int a[2][3]={1,2};
int a[2][3]={{1,2},{4}}; //按行赋值 1 2 0 4 0 0
int a[2][3]={}; //全0
● 未初始化 值为随机值
int a[2][3];
内存分配
a和a[0]打印的值一样,本质不同(a+1是指向下一行,a[0]+1指向下一个):