⼀维数组
数组是⼀种由相同数据类型组成的构造类型。数组的每个成员 称为⼀个 数组元素
• 最简单的数组是 ⼀维数组
⼀维数组的定义:
类型说明符 数组名[常量表达式] = {值1,值2...};
⼀维数组的定义
如何定义⼀个⼀维数组?
数据类型 数组名字 [元素个数];
int ages [10];
数组的初始化
在数据定义的同时对数组进⾏初始化
⽐如: int ages[2] = {3, 5};
数组中元素的访问
通过数组名+下标去访问数组中的元素
⽐如: ages[0];
数组定义举例
// 声明⼀个整型数组
int a[5] = {2, 3, 4, 5, 6};
int b[5] = {2, 3, 4};
int c[5] = {0};
int d[] = {4, 3, 2, 1, 4};
⽰例:
// 整型数组
int a[5] = {0};
// 浮点型数组
float b[] = {2.10, 3.22};
// 字符数组
char str[] = "iPhone";
数组元素
数组元素的 访问:数组名 +下标
数组下标:数组元素在数组中的序号。从 0 开始,到
数组元素个数-1;下标可以是常量,也可以是变量
数组元素的访问
访问数组中的元素时,下标可以为变量
⽐如: age[i];
访问数组中的元素可以采⽤for循环,
我们把这个操作称作遍历
注意:使⽤数组时,注意数组不能越界的问题
注意事项
系统不会检测 数组元素的下标 是否 越界,编程时,必须保证数组
下标 不能 越界。
不能这样定义数组
int array[] = {}; 或者 int array[2] = {1, 2, 3};
数组是⼀个整体,不能 直接参加运算,只能 对 单个元素进⾏处理,
通常⽤到数组的地⽅都会⽤到循环
⼆、数组排序
冒泡排序
使⽤数组时,很多时候需要将数组中的元素按照⼀定条件进⾏排
序
冒泡排序 是⽐较 常见 的排序算法
因为其原理跟 ⽔底⽓泡上升⾄⽔⾯ 很相似⽽得名
冒泡排序涉及到 双循环,外层循环控制趟数,内层循环控制⽐
较次数
字符数组
⽤于存放字符变量的数组称为字符数组
字符数组属于⼀维数组,定义⽅式与普通⼀维数组相似,只是
数据的类型是char
字符数组的定义:
char name[5] = {'a', 'b', 'c', 'd', 'e'};
char name[] = "iPhone";
操作字符数组的函数
有’\0’结束标识的字符数组也称为 字符串
系统提供了很多 字符串处理函数
strlen() 计算字符串长度
strcpy() 字符串拷贝
strcat() 字符串拼接
strcmp() 字符串⽐较
注意事项
字符串所占的空间 ⾄少要⽐ 字符串长度⼤1,因为字符串结尾
默认有’\0’,占⼀个字节, 系统提供的字符串处理函数都是根据
‘\0’ 来判断字符串是否结束
char str[] = {'o', 'k'};
char str = “ok”;
注意:在printf输出字符串时,占位符⽤%s
宏定义
宏定义是预编译功能的⼀种
注意: 预编译⼜称为预处理, 是为编译做的预备⼯作的阶段。
处理#开头的指令, ⽐如拷贝#include包含的⽂件代码,
#define宏定义的替换,条件编译等
使⽤宏定义的好处:可提⾼程序的通⽤性和易读性,减少不⼀致性,
减少输⼊错误和便于修改。例如:数组的元素个数常⽤宏定义
#define PI 3.1415926
#define 是宏定义指令, PI代表宏名, 3.1415926是预编译时会被替
换的内容。
注意事项
#define MUL(A, B) ((A) * (B))
宏定义只是替代的过程,在定义有参数的宏时,运算符要有(),
避免运算优先级的影响
总结
数组 通常与 循环 结合使⽤
数组下标 从0开始 最⼤到 数组容量-1
⼀定要注意下标越界问题
字符串数组在 定义 的时候⼀定要 多留⼀个元素位置留
给’\0’
定义宏时,加括号是为了防⽌受操作符优先级的影响
网友评论