05数组

数组

特点:
在一段连续的内存空间中存放相同的数据类型的数据,可随机访问。

1. 定义

// 1. 数据类型 数组名[ 数组长度 ]
int array[5];
array[0] = 10;
array[1] = 20;
array[2] = 30;
array[3] = 40;
array[4] = 50;
for (int i = 0; i < 5; i++) {
    cout << array[i] << endl;
}

// 2. 数据类型 数组名[数组长度] = {值1,值2,值3...}
// 若在初始化数据时,如果有数组元素没有被初始化,则会用0来填补剩余的数据
int array2[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
    cout << array[i] << endl;
}

// 3. 数据类型 数组名[] = {值1,值2,值3...}
int array3[] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
    cout << array3[i] << endl;
}

2. 一维数组名

一维数组名的作用:

  1. 可以统计整个数组在内存中的长度;
  2. 可以获取数组在内存中的首地址;

示例:

#include <iostream>
using namespace std;

int main () {
    int arr[5] = {1, 2, 3, 4, 5};
    
    cout << "arr数组的元素为:"; 
    for (int i = 0; i < 5; i++) {
        cout << arr[i] << " ";
    }
    cout << "\n数组所占内存为:" << sizeof(arr) << endl;
    cout << "数组元素所占内存为:" << sizeof(arr[0]) << endl;
    cout << "数组长度为:" << sizeof(arr) / sizeof(arr[0]) << endl;
    cout << "数组的首地址为:" << arr << endl;
    
    cout << "数组第二个元素的地址为:" << &arr[1] << endl;
    cout << "数组第三个元素的地址为:" << &arr[2] << endl;

    return 0;
}

输出结果为:

arr数组的元素为:1 2 3 4 5
数组所占内存为:20
数组元素所占内存为:4
数组长度为:5
数组的首地址为:0x7ffe32931920
数组第二个元素的地址为:0x7ffe32931924
数组第三个元素的地址为:0x7ffe32931928

案例1:

需求:在一个数组中记录了五只猪的体重,找出并打印最重的猪的体重。

#include <iostream>
using namespace std;

int main () {
    int arr[5];

    // 输入
    cout << "请输入五只猪的体重:" << endl;
    for (int i = 0; i < 5; i++) {
        cin >> arr[i];
    }

    // 找最重的猪
    int max = arr[0];
    for (int i = 1; i < 5; i++) {
        if (max < arr[i]) {
            max = arr[i];
        }
    }
    cout << "最重的猪有:" << max << "斤。\n" << endl;
   
    return 0;
}

案例2:

需求:输入5个元素,并将元素逆置。

#include <iostream>
using namespace std;

int main () {
    int arr[5];

    cout << "请输入5个整数:" << endl;
    for (int i = 0; i < 5; i++) {
        cin >> arr[i];
    }
    
    for (int i =0; i < 5/2; i++) {
        int tmp = arr[i];
        arr[i] = arr[4-i];
        arr[4-i] = tmp;
    }
    
    for(int i = 0; i < 5; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

3. 冒泡排序

作用:最常用的排序算法,对数组元素进行排序

#include <iostream>
using namespace std;

void output(int* arr, int size) {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int size = 8;
    int arr[8] = {4, 2, 8, 0, 5, 7, 1, 3, };
    cout << "排序开始前: ";
    output(arr, size);

    // 每次使一个元素就位,共需n-1轮比较
    for (int i = 0; i < size-1; i++) {
        for (int j = 0; j < size-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
        cout << "第" << i+1 << "轮排序后:";
        output(arr, size);
    }

    return 0;
}

运行结果:

排序开始前: 4 2 8 0 5 7 1 3
第1轮排序后:2 4 0 5 7 1 3 8
第2轮排序后:2 0 4 5 1 3 7 8
第3轮排序后:0 2 4 1 3 5 7 8
第4轮排序后:0 2 1 3 4 5 7 8
第5轮排序后:0 1 2 3 4 5 7 8
第6轮排序后:0 1 2 3 4 5 7 8
第7轮排序后:0 1 2 3 4 5 7 8

4. 二维数组

4.1 二维数组的定义:

// 1. 数据类型 数组名[行数][列数]
int arr1[2][3];
arr1[0][0] = 1;
arr1[0][1] = 2;
arr1[0][2] = 3;
arr1[1][0] = 4;
arr1[1][1] = 5;
arr1[1][2] = 6;

// 2. 数据类型 数组名[行数][列数] = { {数据1,数据2}, {数据3, 数据4}}
int arr2[2][3] = 
{   
    {1, 2, 3},
    {4, 5, 6}
};

// 3. 数据类型 数组名[行数][列数] = {数据1, 数据2, 数据3, 数4}
int arr3[2][3] = {1, 2, 3, 4, 5, 6};
// 可见二维数组在实质上还是一维数组,元素地址的计算方式变了。

// 4. 数据类型 数组名[ ][列数] = {数据1, 数据2, 数据3, 数4}
int arr4[][3] = {1, 2, 3, 4, 5, 6};

二维数组的遍历:

for (int i = 0; i < row; i++) {
    for (int j = 0; j < col; j++) {
        cout << arr[i][j] << " ";
    }
    cout << endl;
}

4.2 二维数组名

作用:

  • 获取二维数组所占的内存空间大小;
  • 获取二维数组首地址;

示例:

#include <iostream>
using namespace std;

void output(int arr[][3], int row, int col) {
    cout << "该二维数组的内容为:" << endl;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
}

int main () {
    int row = 2;
    int col = 3;
    int arr[2][3] =
    {
        {1, 2, 3},
        {4, 5, 6},
    };
    output(arr, row, col);
    
    // 1. 查看二维数组占用的内存空间
    cout << "二维数组占用的内存空间为:" << sizeof(arr) << endl;
    cout << "二维数组第一行占用内存为:" << sizeof(arr[0]) << endl;
    cout << "二维数组第一个元素占用空间为:" << sizeof(arr[0][0]) << endl;
    cout << "该二维数组的行数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
    cout << "该二维数组的列数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;


    // 2. 查看二维数组的首地址
    cout << endl << "二维数组的首地址为:" << arr << endl;
    cout << "二维数组第一行首地址为:" << arr[0] << endl;
    cout << "二维数组第二行首地址为:" << arr[1] << endl;

    cout << "二维数组第一个元素首地址为:" << &arr[0][0] << endl;
    cout << "二维数组第二个元素首地址为:" << &arr[0][1] << endl;

    return 0;
}

运行结果为:

该二维数组的内容为:
1 2 3
4 5 6
二维数组占用的内存空间为:24
二维数组第一行占用内存为:12
二维数组第一个元素占用空间为:4
该二维数组的行数为:2
该二维数组的列数为:3
二维数组的首地址为:0x7fffa2c94480
二维数组第一行首地址为:0x7fffa2c94480
二维数组第二行首地址为:0x7fffa2c9448c
二维数组第一个元素首地址为:0x7fffa2c94480
二维数组第二个元素首地址为:0x7fffa2c94484

CS专业在读,热爱编程。
专业之外,喜欢阅读,尤爱哲学、金庸、马尔克斯。
原文地址:https://www.cnblogs.com/jmhwsrr/p/15747177.html