3.1重学C++之【数组定义、案例*2】

#include<iostream>
using namespace std;


int main(){
    /*
        数组特点:
        放在一块连续内存空间中
        数组中每个元素的数据类型相同
        下标从0开始索引
    */

    //数组定义定义方式3种
    // 1
    int arr[5];  //定义
    arr[0] = 10;  //赋值
    arr[1] = 20;
    //arr[2], arr[3], arr[4] = 30, 40, 50;  //这样赋值,访问时读取地址?还是没附上?
    arr[2] = 30;
    arr[3] = 40;
    arr[4] = 50;
    cout << arr[4] << endl;  //访问
    cout << endl;

    // 2
    int arr2[5] = {10, 20, 30, 40, 50};  //注意是大括号
    //这种定义赋值方式,若在初始化数据时未全部填写完,则会用0来填补。
    //例:int arr2[5] = {10, 20, 30} == {10, 20, 30, 0, 0}
    cout << arr2[3] << endl;
    for (int i=0; i<5; i++){
        cout << arr2[i] << endl;
    }
    cout << endl;

    // 3
    // 定义数组时必须有初始长度,比如int arr[5] 或 int arr2[5] = {10, 20, 30, 40, 50} 或 int arr3[] = {30, 20, 10}(这种算长度3的数组)
    int arr3[] = {90, 80, 70, 60, 50, 40, 30, 20, 10};
    for (int i=0; i<9; i++){
        cout << arr3[i] << endl;
    }
    cout << endl;



    /*
        一维数组名称用途:
        可以统计整个数组在内存中的长度
        可以获取数组再内存中的首地址
    */
    // 1
    // 之前,用sizeof(数据类型/变量名)可以得到数据类型长度,现在也可以用来统计数组长度
    cout << sizeof(arr3) << endl;  // 36  整个数组占用内存空间大小
    cout << sizeof(arr3[0]) << endl;  // 4 数组中单个元素占用内存空间大小
    cout << sizeof(arr3)/sizeof(arr3[0]) << endl;  // 9 数组中元素个数==数组长度
    // 2
    cout << "数组首地址:" << arr3 << endl;  // 16进制
    cout << "数组首地址:" << (int)arr3 << endl;  // 10进制
    for (int i=0; i<sizeof(arr3)/sizeof(arr3[0]); i++){
        cout << "第" << i+1 << "个元素的首地址" << (int)&arr3[i] << endl;  // 用&取单个元素的首地址
    }
    // 注意,数组名是一个常量,不可以对其赋值;例arr3 = 100错误
    cout << endl;



    /*
        案例--找数组最大元素值
        五只小猪称体重,找到最重的猪
    */
    int arr4[5] = {300, 350, 200, 400, 250};
    int max_w = 0;
    for (int i=0; i<5; i++){
        if (arr4[i] > max_w){
            max_w = arr4[i];
        }
    }
    cout << "最重的小猪体重:" << max_w << endl;
    cout << endl;



    /*
        案例--数组元素逆置
    */
    // 数组长度-1=末尾元素下标
    int arr5[5] = {1, 3, 2, 5, 4};
    cout << "数组逆置前:" << endl;
    for (int i=0; i<5; i++){
        cout << arr5[i] << endl;
    }
    // 实现逆置思路:
    // 记录起始下标位置和结束下标位置
    // 起始下标和结束下标的元素互换;起始位置++,结束位置--
    // 循环执行上句,直至起始位置>=结束位置
    int start_p = 0;
    int end_p = sizeof(arr5)/sizeof(arr5[0]) - 1;
    while (start_p < end_p){
        int temp = arr5[start_p];
        arr5[start_p] = arr5[end_p];
        arr5[end_p] = temp;
        start_p++;
        end_p--;
    }
    cout << "数组逆置后:" << endl;
    for (int i=0; i<5; i++){
        cout << arr5[i] << endl;
    }


    return 0;
}

posted @ 2021-03-10 13:27  yub4by  阅读(47)  评论(0编辑  收藏  举报