C语言二维数组
一 :二维数组
一维数组的每一个元素又是一个数组(数组的数组)
int a[3][4],定义一个数组,有3个元素,a[0]、a[1]、a[2]
a[0] 又是一个一维数组,有4个元素
二:二维数组的定义及注意
格式:数据类型 二维数组名[第一维的长度][第二维的长度]
int arr[3][4];
注意:
1)数组名不能和变量名重复
2)遵循标识符命名原则
3)数组的长度可以使用宏定义
4)数组的长度可以使用变量
int m,n;
scanf("%d,%d",&m,&n);
int arr[m][n]; //这种写法是可以的 让用户输入两个值
sum(int x,int y,int arr[x][y]); //这种写法也是可以的
三:二维数组的初始化
1)定义的同时进行初始化
int a[5]={1,2,3};
int a[] = {1,2};
int a[3][4]={{},{},{}}
格式:int a[m][n]={{值1,值2,....,值n},{},{}.....{m}}
(1)完全初始化
int a[2][3]={{12,2,3},{23,45,56}};
int a1[2][3]={1,5,2,3,4,8}; 可以的
a[0][0]=1,a[0][1]=5,a[0][2]=2,
a[1][0]=3,a[1][1]=4,a[1][2]=8
//省略第一维的初始化,注意:第二维不能省略
int a[][2]={{1,2},{3,4},{3,5}};
//定义了3行2列的数组
(2)部分初始化
int a3[2][2]={{0},{0}};
int a5[2][2]={1,2,3}
指定元素的初始化
int a4[3][4]={{[0][3]=1},{[2][2]=100}}
2)先定义后初始化
int a[4][3];
a[0][0]=12,a[0][1]=12,a[0][2]=12
a[1][0]=12,a[1][1]=12,a[1][2]=12
3)二维数组的访问
数组名[行下标][列下标];
int a[3][4]; //最大下标 a[2][3]
a[0][0] = 13;
int [m][n]数组
行下标范围:0 ~ m-1
列下标范围:0 ~ n-1
四:二维数组的存储细节
二维数组在计算机内存中有两种存储方式:
1>按行以此存储
2>按列以此存储
//计算二维数组占用的总得字节数
size = sizeof(arr);
//计算一行占用多少个字节
size = sizeof(arr[0]);
//计算一个二维数组的每一行有多少列
size = sizeof(arr[0])/sizeof(int);
//计算一个二维数组有多少行
size = sizeof(arr)/sizeof(arr[0]);
五:二维数组跟函数的关系,同一维数组也是分为两种情况
1>数组中得元素作为形参(值传递)
2>数组名作为形参 (地址传递也就是指针,这样可以改变数组的变量值)
注意点同一维数组
应用的话可以作为地图做迷宫,推箱子,五子棋游戏