目录
1. 定义
C语言中并不存在真正的二维数组;
二维数组的本质:一维数组类型的一维数组。
二维数组数据存储时按行优先存储。
语法:
类型说明符 数组名 [常量表达式][常量表达式];
(1)类型说明符:用来说明数组中存储数据的类型
(2)数组名:标识符
(3)第一个常量表达式:表示有多少行
(4)第二个常量表达式:表示有多少列
eg:
int a[3][4]; // 表示定义了一个3行,4列总共12个int型元素的二维数组
2. 初始化
(1)全部初始化
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)部分初始化 --- 未初始化部分为0
int a[3][4] = {1,2,3,4};
赋值:循环赋值,用scanf输入值。
3. 数组元素的引用
数组名 [ 行 ] [ 列 ];
a[0][0]; // 表示0行0列那个数
4. 二维字符型数组
4.1 初始化
char s[3][10] = {"hello","world","china"};
char s[3][10] = {{"hello"},{"world"},{"china"}};
赋值:
gets(s[0]); // s[0] 就是0行 这个一维字符数组的数组名
4.2 二维字符型数组练习
排序和二分查找:
#include<stdio.h>
#include<string.h>
int main(void)
{
char s[5][10];
int i = 0;
int j = 0;
for(i = 0;i < 5;++i)
{
gets(s[i]);
}
// 排序
char s1[10];
for(i = 0;i < 4;++i)
{
for(j = i+1;j < 5;++j)
{
if(strcmp(s[i],s[j])>0)
{
strcpy(s1,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],s1);
}
}
}
// 打印排序后的结果
for(i = 0;i < 5;++i)
{
printf("s[%d] = %s\n",i,s[i]);
}
// 查找
char s2[10];
printf("Input the s2:");
scanf("%s",s2);
int begin = 0;
int end = strlen(s)-1;
int mid = 0;
while(begin<end)
{
mid = (begin+end)/2;
if(strcmp(s[mid],s2)>0)
{
end = mid-1;
}else if(strcmp(s[mid],s2)<0)
{
begin = mid+1;
}else
break;
}
if(begin<end)
{
printf("找到了\n");
}else
{
printf("没找到\n");
}
return 0;
}
运行结果: