数组:一组具有相同数据类型的数据的集合
一维数组
二维数组
字符数组
一维数组
定义格式:
类型说明符 数组名[整型表达式];
"类型说明符":指定数组元素的类型,任意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