二维数组
#include <stdio.h>
/*
二维数组概念:二维数组中的每个元素是类型相同的一维数组(数组的数组)
基本格式:类型说明符 数组名[常量表达式1][常量表达式2];常量表达式1为行,常量表达式2为列
如 int a[3][4]={{},{},{}};即为定义了一个有3个元素的二维数组
0 1 2 3
0 0,0 0,1 0,2 0,3
1 1,0 1,1 1,2 1,3
2 2,0 2,1 ,22 2,3
以上为该数组下标,逻辑结构是矩阵但是内存结构是连续的
多维数组基本格式 数组名 [表达式1][表达式2]...[表达式n];
*/
int main()
{
int i = 0, j = 0;
//初始化方式一 分行赋初值
int nums0[3][3] = { {1,2,3},{1,2,3},{1,2,3} };
//初始化方式二 按排序赋值
int nums1[3][3] = { 1,2,3,1,2,3,1,2,3 };
//初始化方式三 对部分元素赋值
int nums2[3][3] = { 1,2 };//第一行第一个和第二个
int nums3[3][3] = { {1},{2},{3} };//每行第一个
//其余默认赋值为0
//初始方式四 全部初始化为0
int nums4[3][3] = {};
//访问赋值要用双循环
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("&numd0[%d][%d]=%p,nums0[%d][%d]=%d ",i,j,&nums0[i][j],i,j,nums0[i][j]);//打印指针地址值%p,验证数组的内存连续性,打印的为16进制数,一个int四个bit
}
printf("\n");
}
printf("%p\n", nums0);
printf("%p\n", nums0[0]);
//二维数组名字为整个二维数组内存起始地址,也是二维数组中第一个子数组内存起始地址
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("numd0[%d][%d]=%d,nums1[%d][%d]=%d ", i, j, nums0[i][j], i, j, nums1[i][j]);
}
printf("\n");
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("sum[%d][%d]= %d ", i, j, nums0[i][j] + nums1[i][j]);
}
printf("\n");
}
return 0;
}