跳至正文
View Categories

2 min read

主要内容 #

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;
    }

    在使用索引时,要特别注意“数组越界”错误,也就是访问到内存中不属于数组的区域

  • 数组的索引 ID 必须在 [0, 元素数量) // ID 的取值,包含 “0” ,不包含“元素数量”
  • 数组的索引 ID 不可以是负数
  • 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'

    字符串的特点:

  • 字符串,尾后有 ‘\0’
  • 字符串,初始化不使用大括号({ })
  • 字符串,初始化不允许中括号([ ])和双引号(” “)中都有值
  • 习题 #

    课后练习