目录
1. 定义
2. 初始化
3. 数组元素的引用
4. 二维字符型数组
4.1 初始化
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;}elsebreak;}if(begin<end){printf("找到了\n");}else{printf("没找到\n");}return 0;
}
运行结果: