1.数组的基本概念
1.1 数组
1.2 下标
1.3 数组各元素的内存连续
1.4 数组初始化
2.数组使用的注意事项
一系列 相同类型的数据 在内存中依次存放的 集合,称为 数组。它所包含的每一个数据叫做数组 元素,所包含的数据的个数称为 数组长度。
例如
char arr[4];//包含4个字符型元素的数组
① char 表示该数组的类型为字符型。
② arr 为该数组的名称。
③ [4] 表示该数组包含4个相同类型的元素。
注意:数组中每个元素的数据类型必须相同,且与数组定义的类型一致
数组中的每个元素都有一个序号,这个序号从0开始,称为 下标。
例如
char arr[4] = {'a', 'b', 'c', 'd'};
根据该数组只有4个元素,可知该数组具有4个 下标,即0、1、2、3。所以可得出以下关于每个不同的 下标 所对应的元素:
① char arr[0] = ‘a’;
② char arr[1] = ‘b’;
③ char arr[2] = ‘c’;
④ char arr[3] = ‘d’;
注意:访问数组元素时,下标不能超过规定的取值范围,过大或过小都会越界,从而导致数组溢出,引发一定的错误
数组是一个整体,它的各个元素之间的内存是连续的。
char arr[0] | char arr[1] | char arr[2] | char arr[3] |
---|---|---|---|
a | b | c | d |
该特性需要牢记在心,在之后 指针 的操作中,会有地方需要使用到这一特性。
数组元素的值由" { } " 包围,各个值之间以" , " 分隔
① 整型数组
int arr[4] = {1, 222, 23, 67};//定义数组的同时,给每个元素赋值整型数据
② 字符型数组
char arr[4] = {'a', 'b', 'c', 'd'};//定义数组的同时,给每个元素赋值字符型数据
③ 浮点型数组
float scores[10] = {0.0};//定义数组的同时,给每个元素赋值浮点型数据
④ 部分元素赋值,未赋值部分自动初始化为0
int arr[10] = {1, 222, 23, 67};//定义数组的同时,给部分元素赋值整型数据
// arr[0] = 1; arr[1] = 222; arr[2] = 23; arr[3] = 67;
// 此时arr[4]~arr[9] 被自动初始化为0
/* 对于short、int、long,未赋值部分自动初始化为整数 0
对于char,未赋值部分自动初始化为字符 '\0'
对于float、double,未赋值部分自动初始化为小数 0.0
*/
⑤ 所有元素初始化为 0
int num[10] = {0};
char arr[10] = {0};
float scores[10] = {0.0};
/* 该赋值方法相当于赋值 num[0] = 0; arr[0] = '\0'; scores[0] = 0.0;
而其他9个元素由其自动赋值 0 或 '\0' 或 0.0
⑥ 由"⑤"可知,只有 0 或 '\0' 或 0.0 可以采取集体赋值的方法,而要赋值 0 或 '\0' 或 0.0 之外的数据,必须对每个元素逐个赋值。若只给整型数组全部赋值1,需采用如下方式:
int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
// 使用此方法赋值 arr[0]~arr[9] 都为1
int a[10] = 1;
// 使用此方法赋值 arr[0] = 1; arr[1]~arr[9] 都为0
⑦ 给全部元素赋值,在定义数组时可以不给出数组长度
int num[] = {1, 2, 3, 4, 5};
等价于:
int num[5] = {1, 2, 3, 4, 5};
输入
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char arr1[] = "abc";// "abc" -- 'a' 'b' 'c' '\0'
// '\0'是字符串的结束标志
char arr2[] = {'a', 'b', 'c'};// 'a' 'b' 'c'
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
输出出现乱码
不难发现,arr1[]的输出结果 正常,而arr2[]的输出结果里出现了 乱码。造成这种现象的原因是,arr1[]用此定义方法,定义的 arr1[0] = ‘a’; arr1[1] = ‘b’; arr1[2] = ‘c’; arr1[3] = ‘\0’; 。而arr2[]的定义方式,定义的 arr1[0] = ‘a’; arr1[1] = ‘b’; arr1[2] = ‘c’; arr1[3] = 随机值; 。导致了乱码的出现。
解决办法:将char arr2[] = {'a', 'b', 'c'}; 改为 char arr2[] = {'a', 'b', 'c', 0};
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char arr1[] = "abc";// "abc" -- 'a' 'b' 'c' '\0'
// '\0'是字符串的结束标志
char arr2[] = {'a', 'b', 'c', 0};// 'a' 'b' 'c' '\0'
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
★C语言学习5:机器数、真值、原码、反码和补码详解
★C语言学习6:数据类型 -> 基本类型 -> 整型类型(int、short int、long int、char等)
★C语言学习7:ASCII码表及用法简介
★C语言学习8:全局变量和局部变量
★C语言学习9:This function or variable may be unsafe. (Visual Studio 2013关于scanf函数报错的解决办法)