数组的基本概念及分类 数组:把具有相同类型的若干变量安装有序的形式组织起来。这些按序排列的同类型数据的集合称为数组。 数组元素:构成数组的数据。每个数组元素有相同的名称,不同的下标。 数组下标:是数组元素位置的一个索引。从0开始。 维数:数组元素下标的个数。根据维数可以分为一维数组,二维数组,三维数组和多维数组。 按存储内容分类:数组数组、字符数组、指针数组和结构数组。 一 一维数组 1 一维数组的定义 如果一个数组所有的元素都不是数组,这种数组称为一维数组。 数组的定义方式: 类型说明符 数组名[常量表达式]; 类型说明符:基本数据类型或者构造数据类型。 数组名:用户定义的数组标识符。 方括号内:数组元素的个数。 注意 a 数组的长度可以是常量也可以是常量表达式还可以是宏。不可以是变量。 b 数组表示符遵守标识符命名规范。 c 数组名不能与其他变量名同名。 2一维数组的初始化 给每个数组赋予初值。初始化是在编译阶段进行的。 a 定义的同时初始化 类型说明符 数组名[常量表达式]={值列表}; int arr[3]={1,2,3}; 类型说明符 数组名[]={值列表}; int arr[]={1,2,3}; 元素的个数决定了数组的长度。 b 定义的同时部分初始化 类型说明符 数组名[常量表达式]={部分值列表}; int arr[3]={1,2}; int arr[3]={[1]=12}; 将下标为1的元素赋值为12 c 先定义数组后初始化 定义数组: int arr[3]; 初始化:a[0]=1; a[2]=2; 注意 数组未初始化的初值为随机值。 数值型数组部分初始化的数组其他元素初值为0. 字符型数组部分初始化的数组其他元素初值为ascii码的0. 3一维数组的引用 数组名[下标]; 下标从0开始。 4一维数组的存储方式。 a 计算机会给数组分配一段连续的内存空间。 b 数组名代表数组的首地址,从首地址位置依次存入数组的第一个,第二个…第n个元素。数组收地址==数组第一 个元素的首地址==数组名 c每个元素占用空间的大小取决于数组类型。 d元素地址是连续的。 5一维数组长度计算方法 计算数组总长度(字节):sizeof(数组名)数据类型长度:sizeof(数据类型) 数组长度=数组总长度/数组类型; 注意 数组越界问题。 6数组元素作为函数参数 a 每个元素作为函数实参。 b 数组名作为函数的形参和实参。 函数调用时,实参和形参之间是地址传递,将实参数组的首地址传给形参数组 函数定义 返回值类型 函数名(数组类型参数名称[]){ 函数体; } 函数调用 函数名(数组名); 注意 形参数组和实参数组的数据类型必须一致。 形参数组的长度可以不写。 函数体内无法计算形参数组的长度。 二 二维数组 特殊的一维数组,一维数组的每个元素又是一个一维数组。 1 二维数组的定义 类型说明符 数组名[行数][列数] 2 二维数组初始化 1) 完全初始化 int a[2][3]={{1,2,3},{4,5,6}}; int a[2][3]={1,2,3,4,5,6}; 2)可以省略第一维长度,跟一维数组省略长度类似 3)部分初始化 int a[2][3]={1,2,3}; int a[2][3]={{1},{2},{3}}; 4)先定义后初始化 int a[2][3]; a[0][0]=1; …… 3 二维数组的遍历 双下标形式 数组名[行下表][列下标]; 双循环遍历,外层循环遍历行,内循环遍历列 4 二维数组的存储 a计算机分配连续的内存空间 b数组名代表数组首地址。 c每一行存储方式,从行首地址开始,依次存储第一个,第二个… d每个元素的占用字节数相同,取决于数组类型 e 数组元素之间地址连续。 5 二位数组做参数 类似一维数组。 三 字符串 字符串是位于双引号中的字符序列。 在内存中以”\0”结束,所占字节比实际字节多一个。作为字符串的结束符。 C语言中没有字符串变量。可以用字符数组存放字符串。 1 字符数组的定义 char数组名[数组长度]; char ch[10]=”ABCDEF”; 2 字符数组的初始化 参考数值数组的初始化。 char str[4]={“sdaddsa”}; char str[]=“dadada”; 注意 数组长度>实际长度+1 可以在定义数组并赋值的时候不添加数组长度 char str[]=“dadada”; 3 字符数组的引用 1)类似数值数组用%c打印 2)以%s打印整个字符串数组。输出一条字符串。遇到”\0”结束。 3)以%s接收键盘输入的字符串,遇到字符串空格结束。并且输入的长度小于字符数组的长度。 4 字符数组的长度 sizeof(数组名) 5 字符数组和普通数组的区别 1) scanf和printf时候都 可以用%s进行字符串的输入输出。 2) 字符串数组初始化的时候可以去掉大括号。 char str[10]=”sdadas”; 6 字符串处理函数 使用函数的时候需要包含string.h的头文件 1) 字符串输出函数puts puts(地址);打印该地址之后的字符串遇到“\0”为止 可以自动换行 2) 字符串输入函数gets gets(地址); 会有警告,输入长度可能会大于数组长度。 3) 连接字符串strcat strcat(str1,str2);将字符串str2连接到str1之后。赋值给str1. 4) 字符串拷贝函数strcpy strcpy(str1,str2);将str2copy到str1中。会覆盖str1之前的值。 5) 字符串比较函数strcmp strcmp(str1,str2); 比较两个字符串的大小,比较方法是从第一个字符开始逐个比较字符的ascii值遇到不同的为止。 返回值 >0 str1>str2 返回值<0 str1<str2 返回值=0 str1==str2 6) 字符串长度计算strlen 计算字符串的长度 不计算“\0“ strlen(str);
|