📜  C C++中的数组(1)

📅  最后修改于: 2023-12-03 14:39:37.734000             🧑  作者: Mango

C/C++中的数组

数组是一种存储相同类型数据的容器,是C/C++基础数据类型之一。在程序中,数组能够很好地组织和存储相同类型的数据,方便数据的操作和处理。

1. 定义数组

定义数组需要指定数组的类型、名称和长度。

C语言:

int a[5];  // 定义长度为 5 的整型数组 a

C++语言:

int a[5];  // 定义长度为 5 的整型数组 a

在定义数组时,可以同时初始化数组:

C语言:

int a[5] = {1, 2, 3, 4, 5};  // 定义长度为 5 的整型数组 a,并初始化为 {1, 2, 3, 4, 5}

C++语言:

int a[5] = {1, 2, 3, 4, 5};  // 定义长度为 5 的整型数组 a,并初始化为 {1, 2, 3, 4, 5}

若只给部分元素赋值,则其余元素将被初始化为0:

C语言:

int a[5] = {1, 2, 3};  // 定义长度为 5 的整型数组 a,并初始化为 {1, 2, 3, 0, 0}

C++语言:

int a[5] = {1, 2, 3};  // 定义长度为 5 的整型数组 a,并初始化为 {1, 2, 3, 0, 0}
2. 访问数组

数组中的元素可以通过下标访问,数组下标从0开始。

C语言:

int a[5] = {1, 2, 3, 4, 5};
printf("%d\n", a[2]);  // 访问数组a的第3个元素,输出3

C++语言:

int a[5] = {1, 2, 3, 4, 5};
cout << a[2] << endl;  // 访问数组a的第3个元素,输出3

可以使用循环访问数组中的所有元素。

C语言:

int a[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
    printf("%d ", a[i]);
}

C++语言:

int a[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
    cout << a[i] << " ";
}
3. 指向数组的指针

定义指向数组的指针需要指定指针类型和指针名称,指针内容为数组首元素的地址。

C语言:

int a[5] = {1, 2, 3, 4, 5};
int *p = a;  // 定义整型指针 p 指向整型数组 a 的首元素

C++语言:

int a[5] = {1, 2, 3, 4, 5};
int *p = a;  // 定义整型指针 p 指向整型数组 a 的首元素

使用指针访问数组元素,可以通过指针加减来实现。

C语言:

int a[5] = {1, 2, 3, 4, 5};
int *p = a;
printf("%d\n", *(p+2));  // 输出数组 a 的第3个元素,即 3

C++语言:

int a[5] = {1, 2, 3, 4, 5};
int *p = a;
cout << *(p+2) << endl;  // 输出数组 a 的第3个元素,即 3
4. 二维数组

二维数组是由多个一维数组组成的数组,可以理解为表格的形式。定义二维数组需要指定数组类型、名称和行列数。

C语言:

int a[2][3] = {{1, 2, 3}, {4, 5, 6}};  // 定义一个2行3列的二维整型数组,并初始化

C++语言:

int a[2][3] = {{1, 2, 3}, {4, 5, 6}};  // 定义一个2行3列的二维整型数组,并初始化

使用循环访问二维数组中的元素。

C语言:

int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 3; j++) {
        printf("%d ", a[i][j]);
    }
}

C++语言:

int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 3; j++) {
        cout << a[i][j] << " ";
    }
}
5. 数组作为函数参数

数组可以作为函数参数传递。

C语言:

void printArray(int a[], int n) {  // 定义函数,接收一个整型数组和数组长度作为参数
    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
}
int main() {
    int a[5] = {1, 2, 3, 4, 5};
    printArray(a, 5);  // 调用函数
    return 0;
}

C++语言:

void printArray(int a[], int n) {  // 定义函数,接收一个整型数组和数组长度作为参数
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
}
int main() {
    int a[5] = {1, 2, 3, 4, 5};
    printArray(a, 5);  // 调用函数
    return 0;
}
6. 空指针和野指针

空指针是指未指向任何内存地址的指针。在定义指针时,可以使用NULL来初始化空指针。

C语言:

int *p = NULL;  // 定义空指针 p

C++语言:

int *p = nullptr;  // 定义空指针 p,在C++11之前可以使用NULL来代替nullptr

野指针是指指向未知或未分配内存地址的指针。使用野指针访问内存会导致程序崩溃或不可预知的结果,应该避免使用野指针。

7. 数组的大小

由于数组在定义时需要指定数组长度,所以数组的大小固定不变,无法动态改变。程序可以通过sizeof运算符来获取数组的大小。

C语言:

int a[5] = {1, 2, 3, 4, 5};
printf("%d\n", sizeof(a));  // 输出数组 a 的大小

C++语言:

int a[5] = {1, 2, 3, 4, 5};
cout << sizeof(a) << endl;  // 输出数组 a 的大小
8. 总结

数组是一种基础数据类型,可以存储相同类型的数据。定义数组需要指定数组类型、名称和长度。数组下标从0开始,通过下标可以访问数组中的元素。指向数组的指针是指针类型,指向数组首元素的地址。二维数组是由多个一维数组组成的数组。数组可以作为函数参数传递。空指针未指向任何内存地址,野指针指向未知或未分配内存地址。数组的大小固定不变,可以通过sizeof运算符获取数组的大小。