前言
C语言数组与字符串学习笔记
数组的特点
- 数组下标从0开始
- 数组所有成员在内存中是连续的
- 数组所有成员的数据类型相同
- 数组名在C语言中实际上是数组第一个元素的地址常量
一维数组
定义数组
数组初始化
1
| 数据类型 变量名[数组长度] = { 数据, 数据, ... };
|
- 这种情况下如果数据的长度没有达到数组长度,其他后续的下标位置的元素都为默认值(int类型的默认值为0)
初始化为默认值
通过数据定义长度
1
| 数据类型 变量名[] = { 数据, 数据, ... };
|
修改数组的数据
遍历数组
sizeof(数组名)
:数组整体大小
sizeof(数组名[0])
:数组一个成员的大小
sizeof(数组名)/sizeof(数组名[0])
:数组成员个数
1 2 3 4 5
| int i; for (i = 0; i < sizeof(数组名)/sizeof(数组名[0]); i++) { ... }
|
二维数组
定义数组
数组初始化
1
| 数据类型 变量名[数组长度][数组长度] = { { 数据, 数据, ... }, { 数据, 数据, ... }, ... };
|
- 这种情况下如果数据的长度没有达到数组长度,其他后续的下标位置的元素都为默认值(int类型的默认值
为0
初始化为默认值
1
| int 变量名[数组长度][数组长度] = { 0 };
|
通过数据定义长度
1
| 数据类型 变量名[][数组长度] = { { 数据, 数据, ... }, { 数据, 数据, ... }, ... };
|
修改数组数据
遍历数组
1 2 3 4 5 6 7 8
| int i, j; for (i = 0; i < sizeof(数组名)/sizeof(数组名[0]); i++) { for (j = 0; j < sizeof(数组名[0])/sizeof(数组名[0][0]); j++) { ... } }
|
多维数组
字符数组与字符串
定义一个字符数组
字符数组初始化
1 2 3
| char 变量名[数组长度] = { '', '', ..., '\0' };
char 变量名[数组长度] = { '', '', ..., 0 };
|
省略最后一位
1
| char 变量名[数组长度] = { '', '', ... };
|
定义字符串
初始化为默认值
输入一个字符串
scanf 函数
- scanf函数会认为空格和回车都是结束符
- 如果输入超出字符串长度,会报错
- 结尾不会自动换行
1 2
| char 变量名[数组长度] = { 0 }; scanf("%s", 变量名);
|
gets函数
- gets函数只会认为回车是结束符
- 如果输入超出字符串长度,会报错
1 2
| char 变量名[数组长度] = { 0 }; gets(变量名);
|
fgets 函数
- fgets改进了gets
- fgets函数只认为回车是结束符,同时这个换行符也作为输入存进了字符串
- 如果输入超出字符串长度,不会报错
- 结尾会换行,因为有换行符
1 2
| char 变量名[数组长度] = { 0 }; fgets(变量名, sizeof(变量名), stdin);
|
输出一个字符串
printf 函数
<str>
:字符串变量
puts 函数
fputs 函数
完成