4-1 多个容器:数组
本节编程练习不计算学习进度,请电脑登录imooc.com操作

多个容器:数组

前面的课程中,我们学习了变量,知道变量是用来存放数据的。

有的同学可能会写这样的一个程序

#include <stdio.h>

int main(int argc,char **argv)
{
    int student1;
    int student2;
    int student3;
    int student4;
    int student5;
    return 0;
}

似乎是没有什么问题的。但是,班里有 50 个同学呢?或者更多同学呢?

显然这是不太好的,虽然这样的程序也可以工作,那应该怎么写呢?

现在我们就来看看 C++ 中的数组

数组的定义

仍然以存储50个同学的成绩为例,我们要定义 存储50个学生成绩的变量,只要这样定义就可以了。

#include <stdio.h>

int main(int argc,char **argv)
{
    int a[50];
    return 0;
}

那么我们应该如何访问数组中的元素呢?这里我们要用到一个角标的概念,假如我们要给数组中第 1 个变量赋值为 98 分,我们应该这样做。

#include <stdio.h>

int main(int argc,char **argv)
{
    int a[50];

    a[0] = 98;

    return 0;
}

注意:C++ 的角标是从 0 开始的,我们日常生活中的“第一个”,对应 C++ 的数组角标实际上 0 。为了不至于混淆,也常常说“第 0 个”。

数组的内存布局

数组是一个整体,它的内存是连续的,也就是说,数组元素之间是相互挨着的,彼此之间没有一点缝隙,一个 int[5] 的数组,在内存中的布局看起来像下图一样。

数组的初始化

我们可以在声明数组的时候,就给数组赋值

#include <stdio.h>

int main(int argc,char **argv)
{
    int a[4] = {0, 1, 2, 3};
    return 0;
}

如果不想指明数组的长度,可以不写,这样数组的长度就是给定的列表的长度。

#include <stdio.h>

int main(int argc,char **argv)
{
    int a[] = {0, 1, 2, 3}; // 此处数组的长度就是 4
    return 0;
}

你也可以只给部分元素赋值,当 {} 中的元素数量少于 [] 中定义的长度的时候,只给前面部分元素赋值,后面的未指定的元素,将被赋值为 0。

#include <stdio.h>

int main(int argc,char **argv)
{
    int a[4] = {1, 2}; // 1, 2, 0, 0
    return 0;
}

借用此特性,我们可以把数组的所有元素初始化为 0

#include <stdio.h>

int main(int argc,char **argv)
{
    int a[4] = {0};
    return 0;
}

任务

  1.  
下一节