数组:一组具有相同数据类型的数据的集合 一维数组 二维数组 字符数组 一维数组 定义格式: 类型说明符 数组名[整型表达式]; "类型说明符":指定数组元素的类型,任意C语言合法的类型都可以 "数组名":C语言标识符 "整型表达式":指定数组元素的个数。 如: int a[10]; 一维数组在内存中的存放: 在连续的地址空间中,从低地址到高地址依次连续的存放数组中的每个元素。 一维数组元素的引用: 数组名[下标] "下标":C语言里下标是从0开始的整数,即必须要>=0 a[0] a[1] a[2] ... a[9] ★引用数组元素a[i]跟普通变量一样,可读可写,即可作左值也可作右值,还可以取地址。 一维数组的初始化: 数组的初始化用{},并且必须在定义时直接初始化 (1)全部初始化。 int a[10]={1,2,3,4,5,6,7,8,9,10}; (2)可以只对部分元素初始化,后面的元素会自动的初始化为0 int a[10]={1,2,3}; (3)如果对全部数组元素赋初值,那么可以不指定数组的长度 int a[]={1,2,3,4,5,6,7,8,9,10}; 二、二维数组 int a[4];//定义一个数组a 我们再定义一个数组b typeof(a) b[3]; //typeof(a) ==> int[4]; int[4] b[3]; ==> int b[3][4]; 新定义的数组b里面有三个元素,b[0],b[1],b[2]而这三个元素,每个元素都是int[4]类型。 由推导过程可以得出:二维数组实际上是一个一维数组,只不过该一维数组中的元素又是 一个一维数组。 我们把int b[3][4]在使用中可以理解为一个3行4列的矩阵。 二维数组的定义: 类型说明符 数组名[整型表达式1][整型表达式2]; 多少行 每行多少列 二维数组在内存中的存放: 按行存放,即先顺序的存放第一行元素,再接着存放第二行元素... 二维数组元素的引用 数组名[第几行][第几列] 注意:下标是从0开始的 二维数组的初始化: (1)分行给二维数组赋初值 int b[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; (2)将所有数据写在一个花括号内,按数组排列顺序对各元素赋值 int b[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; (3)对部分元素赋值,剩余的元素自动置0 int b[3][4]={1,2,3}; int b[3][4]={{1,2},{5,6,7,8},{9,10}}; (4)如果对全部元素都赋初值,则定义数组时可以对第一维的长度省略, 但是第二维的长度不能省略。 int b[][4]={1,2,3,4,5,6,7,8,9,10};
三、字符数组及字符串操作函数 字符数组就是数组元素是char(字符型)的数组,它包括一维数组和二维数组。 char c1[]={'c','h','i','n','a'}; char c2[]={"china"}; 两者有什么区别呢? char c2[]={"china"}; <=> char c2[]={'c','h','i','n','a','\0'}; 字符串在保存时会在末尾加一个终止符'\0','\0'的ASCII码就是0。 终止符的作用是用来标志字符串的结束。 我们在进行操作字符串时,都是代入字符串的首地址,正因为每个字符串都有一个 终止符,系统才知道字符串的具体范围。 ★数组名它代表数组的首地址,是一个常量 ★字符串操作函数: string.c (1)puts/gets (2)strcpy/strncpy (3)strlen (4)strcat/strncat (5)strcmp/strncmp