C++学习 数组

文章详细介绍了数组的概念,包括一维数组和二维数组的定义方式、特点以及初始化示例。还展示了如何通过数组名获取内存信息,并提供了冒泡排序的代码实现。此外,提到了数组在内存中的存储方式以及不同方式定义二维数组的规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

数组

 一维数组

数组名

 案例:冒泡排序

二维数组

数组名


数组

数组就是一个集合,里面存放了相同类型的数据元素。

 下面的数字对应为数组的下标(索引),可以看到索引范围为0~数组长度-1

特点:

        数组中数据元素的数据类型相同。

        由连续的内存空间 位置组成。

 一维数组

定义方式:

        数据类型 数组名[数组长度];

        数据类型 数组名[数组长度] = {值1,值2.....};

        数据类型 数组[ ] = {值1,值2.....};

#include <iostream>
using namespace std;
int main()
{
    // 数组
    // 数组定义的三种方式:

    // ①数据类型 数组名[数组长度];
    int arr1[5]; // 初始化一个长度为5的int类型数组
    // 元素赋值
    arr1[0] = 1;
    arr1[1] = 1;
    arr1[2] = 1;
    arr1[3] = 1;
    arr1[4] = 1;
    cout << "arr1[0]\t" << arr1[0] << endl; // 1   访问的时候索引范围为0-4
    cout<<"---------"<<endl;

    // ②数据类型 数组名[数组长度] = {值1,值2.....};
    int arr2[5] = {1, 2, 3, 4, 5}; // 初始化一个长度为5的int类型数组 并对数组中元素赋值1~5 如果只初始化三个值 int arr2[5] = {1, 2, 3}; 那么后面的会补默认值,整型就是自动补零int arr2[5] = {1, 2, 3,0,0};

    for (int i = 0; i < 5; i++)
    {
        cout << "arr2[" << i << "]\t" << arr2[i] << endl; // 循环输出arr2的数组元素
    }
    cout<<"---------"<<endl;

    // ③数据类型 数组[ ] = {值1,值2.....};
    int arr3[] = {1, 2, 3, 4, 5};                 // 初始化一个长度为5的int类型数组 并对数组中元素赋值1~5 长度根据{}内数据元素个数确定
    cout << "arr3[2]\t" << arr3[2] << endl;         // 3
    system("pause");
    return 0;
}

注意点:

  • int arr[5] = {1, 2, 3};初始化一个长度为5的整型数组时,元素空缺位置会补默认值.相当于int arr[5] = {1, 2, 3,0,0};
  • 索引值从0开始到数组长度-1
  • 数组名命名规范应与变量名加以区分,避免混淆

数组名

用途:

  • 统计整个数组在内存中的长度
  • 获取数组在内存中的首地址
#include <iostream>
using namespace std;
int main()
{
    // 数组
    // 统计整个数组在内存中的长度
    int arr[5] = {1, 2, 3, 4, 5};
    cout << sizeof(arr) << endl;                  // 输出结果为20 一个整型数组占用4个字节 所以 4*5 = 20
    cout << sizeof(arr) / sizeof(arr[0]) << endl; // 5  数组长度 = 数组所有元素占用的字节总数/单个元素占用的字节总数
    cout << arr << endl;                          // 0x62fe00 数组arr首地址
    cout << (long long)arr << endl;               // 6487552 将数组arr首地址由16进制强转成10进制 地址超出int范围 这里用 long long 强转
    cout << &arr[0] << endl;                      // 0x62fe00 获取数组第一个元素的地址
    cout << &arr[1] << endl;                      // 0x62fe04获取数组第二个元素的地址 验证是否与第一个元素相差4个字节
    system("pause");
    return 0;
}

 

数组名是常量,定义完就无法修改,不可以进行赋值操作。

 案例:冒泡排序

#include <iostream>
using namespace std;

int main()
{
    // 冒泡排序
    int arr[5] = {7, 3, 6, 9, 2};
    int n = 5; // 数组的大小

    // 外层循环控制排序轮数:元素个数-1
    for (int i = 0; i < n - 1; i++)
    {
        // 内层循环对比次数 = 元素个数-当前轮数-1
        for (int j = 0; j < n - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                // 交换位置
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

    // 输出排序结果
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << endl;
    }

    system("pause");
    return 0;
}

二维数组

数组元素是一维数组的数组。

定义方式:

  • 数据类型  数组名[行数][列数];
  • 数据类型  数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}}; //常用
  • 数据类型  数组名[行数][列数] = {数据1,数据2,数据3,数据4};
  • 数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4}; 
#include <iostream>
using namespace std;

int main()
{
    // 二维数组

    // 数据类型  数组名[行数][列数];
    int arr[2][3]; // 定义二行三列整型数组
    arr[0][0] = 1; // 0行0列赋值为1
    arr[0][1] = 2; // 0行1列赋值为2
    arr[0][2] = 3; // 0行2列赋值为3

    arr[1][0] = 1; // 1行0列赋值为1
    arr[1][1] = 2; // 1行1列赋值为2
    arr[1][2] = 3; // 1行2列赋值为3

    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << arr[i][j] << "\t";
        }
            cout << endl;
    }
    cout << "-----------------" << endl;


    // 数据类型  数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}}; //常用 可读性高
    int arr2[2][3] = {
        {1, 2, 3},
        {4, 5, 6}};
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << arr2[i][j] << "\t";
        }
            cout << endl;
    }
    cout << "-----------------" << endl;


    // 数据类型  数组名[行数][列数] = {数据1,数据2,数据3,数据4};
    int arr3[2][3] = {1,2,3,3,2}; // 这样定义 自动区分每3个为1行 这里只给5个数字,测试自动补0
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << arr3[i][j] << "\t";
        }
            cout << endl;
    }
    cout << "-----------------" << endl;

    
    // 数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4}; 
    int arr4[][3] = {1,4,7,2,5,8}; // 鼠标拖动到arr4时你可以看的到他会判断出你声明的时两行三列的二维整型数组
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << arr4[i][j] << "\t";
        }
        cout << endl;
    }
    system("pause");
    return 0;
}

 

 

数组名

用途:

  • 查看二维数组所占内存空间。
  • 获取二维数组首地址。
#include <iostream>
using namespace std;

int main()
{
    // 数组名

    // 查看二维数组所占内存空间。
    int arr[2][3] =
        {
            {1, 2, 3},
            {4, 5}};
    cout << "arr size of  = " << sizeof(arr) << endl;    // 24 int类型四个字节 2*3*4 = 24 验证3行2列 补0也占用字节空间
    cout << "arr[1] size of  = " << sizeof(arr[1]) << endl; // 12 打印二维数组第二行占用内存空间 验证3行2列 补0也占用字节空间
    cout << "arr[0][0] size of = " << sizeof(arr[0][0]) << endl; // 4 第一行第一列元素1占用的字节数为4
    cout << "row size of = " << sizeof(arr) / sizeof(arr[0]) << endl; // 二维数组占用总字节/第一行占用字节数 = 二维数组的行数 
    cout << "column size of = " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl; // 第一行占用字节数/第一个元素占用字节数 = 二维数组列数

    // 获取二维数组首地址。
    cout << "first address  " << (long long)arr << endl;  // 二维数组的首地址、二维数组第一行的首地址,二维数组第一个元素的首地址(具体元素查看地址需要加取址符 &arr[0][0])都是相同的
    system("pause");
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那山川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值