一、一维数组
1 定义
具有一定顺序的若干变量的集合
2 格式
存储类型 数据类型 数组名[元素个数] 例如·int arr[5];
- 访问时,下标从 0开始 a[0]表示第一个数据
- 访问数组元素:数组名[下标]; 下标从0开始,到元素个数-1
- 只有定义时 a[5]代表数组,其他时间 a[i]代表第 i+1个元素
- 数组名:代表数组的首地址,是一个地址常量,不能被赋值,也不能为(左值)
3 特点
数据类型相同;内存连续
比如下面的例子,数组a[5] 的内存是连续的,因为数组元素为int类型,所以每个元素之间地址相差4个字节。
注意
(1)数组的数据类型就是数组元素的数据类型
(2)数组名要符合标识符的命名规则
(3)数组下标范围:0 ~ n-1
(4)在同一个函数中,数组名不能与其他变量名相同
注意数组越界问题 :用到的数组数据不能超出定义的数组范围
4. 数组大小
① sizeof(数组名)
② 数据元素的个数*数据类型的大小 开辟的数组空间大小
利用sizeof(a)查询数组大小,得到的数值就是数组空间大小,也就是数据元素的个数*数据类型的大小 也就是 5*4 = 20,
5. 初始化
- 完全初始化 为每一个元素都赋一个初值 ;
- 部分初始化 只为数组中部分元素赋初值,未初始化部分值为 0
- 未初始化 数组中的元素都不赋值,所有值为随机值
6. 定义空数组
- int a[5]={0};
- int a[5]={ };
7. 引用
(1)必须先定义后引用
(2)每次只能引用一个数据元素 a[i],不能整体引用
(3)注意数组越界问题
8. 循环遍历
- 将数组下标作为循环变量进行循环
9. 清零函数
9.1 bzero
#include <strings.h> 头文件
void bzero(void *s, size_t n);
( 首地址 , 清除的空间大小)
功能:清空数组
参数:数组首地址,
返回值:
9.2 memset
#include <string.h>
void *memset(void *s, int c, size_t n);
功能:清空数组
参数:数组首地址, c 替换的数据, n:清空的字节大小
返回值:数组首地址
二、字符数组
2.1 概念
- 字符数组存放字符串
- 字符串结束标志'\0', \0可不写,但是默认存在,占一个位置
2.2 格式
四种格式:
char a[6] = {"hello"};
char b[6] = "hello";
char c[] = "hello";
char d[33] = "hello";
char a1[] = {'a','b','c'}; // 数据类型是字符型,sizeof(a1)==3
char a2[] = {"abc"}; // 数据类型是字符串,sizeof(a2)==4 必须算上'\0
2.3输入输出
2.3.1 for 循环遍历输出
char a[6] = {"hello"};
for(int i = 0; i < 6; i++)
printf("%d ", a[i]);
2.3.2 字符串输出
char a[] = {"hello world"};
printf("%s\n", a);
%s 字符串输出格式
scanf 遇到空格或回车时会认为输入结束
如果想支持空格的写法,可以用:scanf("%[^\n]",a);
2.3.3 gets puts
输入: char *gets(char *s);
输出: int puts(const char *s);
2.4 计算字符串实际元素个数
2.4.1 遍历判断
2.4.2 strlen 函数
#include <string.h>
size_t strlen(const char *s);
功能:计算字符串实际元素个数 不包括 '\0'
参数:字符串首地址
返回值:实际元素个数
sizeof 和 strlen的区别:
1. sizeof 是关键字,strlen 是函数
2. sizeof 计算开辟的空间大小,strlen 计算字符串实际元素个数
3. sizeof 计算包括 '\0', strlen不包括,char a[] = "hello";
三、二维数组
3.1 基本结构
格式:存储类型 数据类型 数组名[行数][列数]
int a[2][3];
访问数组元素:数组名[行下标][列下标]
下标的范围:0~行数-1,0~列数-1,注意不要数组越界
3.2 初始化
完全初始化
int a[2][3] = {1,2,3,4,5,6};
int a[2][3] = {{1,2,3},{4,5,6}}; 内部的大括号内表示单行内赋值
部分初始化·
int a[2][3]={1,2,3};
int a[2][3]={{1,2},{4,5,6}};
初始化时
可以省略行数,但是不能省略列数
未初始化时 值为随机值,需要单独赋值
3.3 大小
行数*列数=元素个数
行数*列数*sizeof(数据类型)=空间大小
3.4 数组名
数组名也是二维数组首行地址
- a:表示第一行的首地址
- a+1:是第二行的首地址
3.5 循环遍历
for循环嵌套,先行后列