主要内容 #
1. 什么是数组 #
数组,是 C++ 中非常重要的概念之一。
什么是数组呢,来看下面图片。
1.1 引入 #
我们学习过的“字符串”,其实可以看作是“一串字符”排成一列。
类似的,“数组”,简单来说,就是“一组数”排成一列。
来看一些生活中的“数组”:
这里,要注意的就是最后一个例子,这是 bool 变量组成的数组。下面有详细说明。
2. 数组的基本操作 #
2.1 定义 #
如何定义一个数组呢?和定义字符串类似:
#include < iostream > int main() { int value_a; // 定义 int 类型的变量 int array_a[]; // 定义 int 类型的数组的变量 return 0; }
特别注意:
2.2 初始化 #
2.2.1 基本写法 #
#include < iostream > int main() { int array_a[] = {0, 1, 2, 3, 4}; // 初始化为 0, 1, 2, 3, 4 return 0; }
特别注意:
2.2.2 三种变体 #
#include < iostream > int main() { int array_a0[] = {}; // 初始化为 空 int array_a1[3] = {}; // 初始化为 0,0,0 int array_a2[3] = {1,2,3}; // 初始化为 1,2,3 int array_a2[3] = {1,2}; // 初始化为 1,2,0 int array_a2[3] = {1,2,3,4}; // 【错误】指定的数组长度为 3,但是却使用了 4 个值来初始化。 return 0; }
特别注意:
和学习字符串时一样,我们需要把数组,想象成一张表格。
2.3 读 #
与字符串一样,索引符号依然使用的是 [ ]
请看代码:
#include < iostream > int main() { int a[] = {8848, 8611, 7556, 6860, 7810}; for(int i=0; i < 4; i++) std::cout << a[i] << std::endl; // 循环输出数组中的所有元素 return 0; }
在使用索引时,要特别注意“数组越界”错误,也就是访问到内存中不属于数组的区域。
2.4 写 #
#include < iostream > int main() { int a[] = {8848, 8611, 7556, 6860, 7810}; for(int i=0; i < 4; i++) a[i] = a[i]+10; // 修改数组中的元素 return 0; }
3.小结 #
前面的大师码课程中,我们学习过了不同的数据类型。
每一种类型,都可以对应写出一种数组。来看例子:
char dashima_c [] = {}; short dashima_s [] = {}; int dashima_i [] = {}; long dashima_l [] = {}; long long dashima_ll [] = {}; float dashima_f [] = {}; double dashima_d [] = {}; long double dashima_ld [] = {}; unsigned char dashima_uc [] = {}; unsigned short dashima_us [] = {}; unsigned int dashima_ui [] = {}; unsigned long dashima_ul [] = {}; unsigned long long dashima_ull [] = {};
4.字符串和 char 数组 #
这里特别注意一下,字符串看起来,非常像 char 类型的数组。但其实,它们还是有一定的区别。
请看代码
char str [] = ""; // 【差异】这是字符串,最末尾被 C++ 自动添加了 '\0',所以并不是空的。 char dashima_c [] = {}; // 【差异】数组为空 char str1 [100] = ""; // 字符串,长度为 100,全都初始化为 '\0' char str2 [100] = {}; // char 数组,长度为 100,全都初始化为 '\0' char str3 [] = "adc"; // 【差异】这是字符串,所以最末尾被 C++ 自动添加了 '\0' char str4 [] = {'a', 'b', 'c'}; // 【差异】这是 char 数组,最末尾没有 '\0' char str5 [4] = "abc"; // 【差异】【错误语法】字符串,不允许中括号和双引号中都有值 char str6 [1] = "a"; // 【差异】【错误语法】字符串,不允许中括号和双引号中都有值 char str7 [3] = {'a', 'b', 'c'}; // 【差异】这是 char 数组,最末尾没有 '\0'
字符串的特点: