天天看点

C++基础语法:数组

在C++语言中,数组可以存储一个固定大小的相同类型元素的顺序集合。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

数组的声明形式如下所示:

type arrayName [ arraySize ];
           

type是任意类型的有效C++数据类型,而arraySize则是一个大于零的整数常量。

如果要访问指定位置的某一个元素的值,可以采用:

arrayName[index]
           

数组的索引数值从0开始,而不是从1开始。

对数组的初始化可以逐个进行:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
    
    int arr[3];
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    
    cout << arr[0] << endl;
    cout << arr[1] << endl;
    cout << arr[2] << endl;
    
    return 0;
}
           

运行的结果为:

1
2
3
           

对数组的初始化也可以使用一个初始化语句来进行:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
    
    int arr[3] = {1,2,3};
    
    cout << arr[0] << endl;
    cout << arr[1] << endl;
    cout << arr[2] << endl;
    
    return 0;
}
           

运行的结果为:

1
2
3
           

在C++语言中,如果数组没有被初始化,那么未初始化的数组中的元素是随机的。

如果对一个数组进行初始化的时候只声明了部分的元素的值,那么没有给出的部分的元素的值为0:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
    
    int arr[3] = {2};
    
    cout << arr[0] << endl;
    cout << arr[1] << endl;
    cout << arr[2] << endl;
    
    return 0;
}
           

打印的结果为:

2
0
0
           

C++中没有索引越界检查,以下程序可以正常编译,但在运行时可能会产生意外输出:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
    
    int arr[3] = {1,2,3};
    
    cout << arr[4] << endl;

    return 0;
}
           

运行的结果是:

32767
           

C++语言也只是多维数组。

多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:

type arrayName [ x ][ y ];
           

其中type可以是任意有效的C++数据类型,arrayName是一个有效的C++标识符。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。下面是一个二维数组,包含 3 行和 4 列:

C++基础语法:数组

初始化可以采取如下所示的方式:

#include <iostream>
using namespace std;

int main(){
    
    int arrNum [3][3] = {
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };
    
    for (int i = 0; i<3; i++){
        for (int j=0; j<3; j++){
            cout << arrNum[i][j] << endl;
        }
    }
    
    
    return 0;
}
           

运行的结果为:

1
2
3
4
5
6
7
8
9
           

但是同样的也可以采用如下所示的方式来进行:

#include <iostream>
using namespace std;

int main(){
    
    int arrNum [3][3] = { 1,2,3,4,5,6,7,8,9};
    
    for (int i = 0; i<3; i++){
        for (int j=0; j<3; j++){
            cout << arrNum[i][j] << endl;
        }
    }
    
    
    return 0;
}
           

这两者是等同的,不过出于编写和阅读上的考量,建议采用第一种方式来进行。

理论上来讲,可以创建任意维度的数组,但是一般情况之下,创建的数组是一维和二维的。

如果我们要求取数组的长度,我们不可以直接使用length来求取,而是要采用sizeof来进行求取:

#include <iostream>
using namespace std;

int main(){
    
    int arr[3] = {1,2,3};
    
    cout << "数组中的一个元素的数据大小为:" << sizeof(arr[0]) << endl;
    cout << "数组的长度为:" << sizeof(arr)/sizeof(arr[0]) << endl;
    
    return 0;
}
           

运行的结果为:

数组中的一个元素的数据大小为:4
数组的长度为:3
           

C++中的数组中的最后一个元素,不能够直接使用-1来进行访问,而是要先求取数组的长度,在指定最后一个元素的位置。

继续阅读