C++学习 数组

news2024/12/24 0:31:10

目录

数组

 一维数组

数组名

 案例:冒泡排序

二维数组

数组名


数组

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

 下面的数字对应为数组的下标(索引),可以看到索引范围为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;
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

github软件包-golang,不同版本的使用--推荐

一、golang中获取github软件包&#xff0c;不同版本&#xff08;V1,V2...&#xff09;的使用&#xff1a; github中如何使用&#xff1a; golang语言使用的github的软件包&#xff0c;有时候不同版本如何切换&#xff0c;特别是有的版本变化比较多&#xff0c;例如在v1中没有…

Go语言程序设计(一)Go语言概述及基础

一、前言 为了尽可能获得最佳的运行性能&#xff0c;Go语言被设计成一门静态编译型的语言&#xff0c;而不是动态解释型的。Go语言的编译速度非常快&#xff0c;明显的要快过其他同类语言&#xff0c;比如C和C。 Go语言的官方编译器被称为gc。 Go语言具有以下几个特点&#x…

(css)盒子的阴影

(css)盒子的阴影 效果&#xff1a; 代码&#xff1a; box-shadow: inset 0 0 50px 2px #74eaff;解决参考&#xff1a;https://blog.csdn.net/weixin_52984349/article/details/125803515

docker部署私有化镜像仓库

为什么要部署私有化&#xff1a; 1.防止镜像因为内存不够被驱逐 2.方便内网服务器复用 部署步骤&#xff1a; docker pull registry // 如果嫌麻烦&#xff0c;也可以去我的资源里面去拿现成的&#xff0c;docker load -i registry.tar 到自己的docker里。"""如…

Django搭建图书管理系统02:创建并配置APP功能模块

&#x1f4c1; 创建APP **Django中的APP&#xff08;应用程序&#xff09;是将功能模块组织在一起的单位&#xff0c;每个APP通常负责处理特定的功能。**开发者可以将不同功能的模块放在不同的app中, 方便代码的复用。app就是项目的基石&#xff0c;因此开发博客的第一步就是创…

[C++] C++11新特性介绍 分析(2): lambda表达式、function包装器、bind()接口

文章目录 [toc] C11**lambda 表达式**lambda 表达式lambda 表达式底层 包装器 functionfunction 包装普通可调用对象function 包装类内成员函数 bind()bind() 使用 及 功能1. 调整参数位置2. 绑定参数 C11 上一篇介绍C11常用的新特性只介绍了一部分. 本篇文章继续分析介绍. l…

Linux简介与安装

文章目录 前言一、Linux简介1.Linux是什么2.学完Linux后能做什么 二、Linux安装1.安装方式介绍2.安装Linux3.网卡设置4.安装SSH连接工具5. Linux目录结构 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。当然&…

括号生成(力扣)递归 JAVA

目录 题目描述&#xff1a;纯递归解法&#xff1a;递归 回溯&#xff1a; 题目描述&#xff1a; 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a…

《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)

1.环境搭建 基于python3和selenium3做自动化测试&#xff0c;俗话说&#xff1a;工欲善其事必先利其器&#xff1b;没有金刚钻就不揽那瓷器活&#xff0c;磨刀不误砍柴工&#xff0c;因此你必须会搭建基本的开发环境&#xff0c;掌握python基本的语法和一个IDE来进行开发&…

modelscope魔塔初探--TTS

官网 step1 可以选择指定模型&#xff0c;对于多情感的模型&#xff0c;还可以通过标签实现语气情感 from modelscope.outputs import OutputKeys from modelscope.pipelines import pipeline from modelscope.utils.constant import Taskstext <speak><emotion …

Springboot实现热部署

目录 1、问题阐述 2、实现方式 3、开始配置 3.1在pom.xml中添加依赖 3.2devtools配置 3.3修改IDEA配置 3.4测试一下 1、问题阐述 在实际项目开发过程中&#xff0c;每次修改代码就得将项目重启&#xff0c;重新部署&#xff0c;对于一些大型应用来说&#xff0c;重启时…

特征选择算法 | Matlab实现基于ReliefF特征选择算法的回归数据特征选择 ReliefF

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 特征选择算法 | Matlab实现基于ReliefF特征选择算法的回归数据特征选择 ReliefF 部分源码 %--------------------

五分钟就可以安装MySQL

目录 ⛈️一.什么是MySQL ⛈️二.为什么要使用MySQL ⛈️三.MySQL有什么优点 ⛈️四.官网&#xff1a; ⛈️五.下载 ⛈️六.安装 ⛈️七.查看 ⛈️八.修改密码 一.什么是MySQL MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用结…

【Python编程系列】1、Python安装

Python安装 1、下载安装包 官网地址:https://www.python.org/ 进入后,在Downloads菜单下选择python运行的系统环境: 以Windows系统为例,进入后,选择合适的版本下载: 2、安装Python软件包 双击可执行文件exe: 弹出安装窗口后: 我们一般选择"Install Now"的…

Linux 配置dns覆盖默认127.0.0.53

Linux dns默认127.0.0.53&#xff0c;在/etc/resolve.conf中存在 nameserver 127.0.0.53&#xff0c;手动修改无果&#xff0c;每次重启依旧127.0.0.53&#xff0c;因为这是系统生成的文件&#xff0c;resolvectl命令来查dns的配置。 要修改dns&#xff0c;先暂停dns服务&…

6 JSR303校验

6.1 加入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 6.2 在实体类上加注解 在实体类上加入Validated注解。并且在属性上方加入Emall(messag…

Selenium自动化测试技巧

目录 前言&#xff1a; Selenium自动化 跨浏览器测试中的Selenium 利用正确的定位器 数据驱动的测试 不要依赖特定的驱动程序 选择器顺序 使用PageObjects设计模式 提倡wait避免sleep 关闭Firebug起始页 前言&#xff1a; Selenium是一个广泛使用的自动化测试框架&a…

Android11 Settings加载流程

一、系统设置首页(一级菜单)&#xff1a; 1、Settings 之所以要在此定义空的Activity&#xff0c;是为了外部应用能直接跳转到XX_SettingsActivity界面&#xff0c;因为如果只是fragment的话&#xff0c;外部是没法跳转到fragment界面的&#xff0c;跳转到XX_SettingsActivit…

【无公网IP】在外Windows远程连接MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自cpolar极点云文章&#xff1a;公网远程…

Camera API1 使用说明

Camera API2 使用说明 目录 一、开启相机 1.1创建项目 1.2注册权限 1.3配置相机特性要求 1.4 获取摄像头的个数 1.5 根据 ID 获取 CameraInfo facing 1.6 开启相机 1.7 关闭相机 二、预览 2.1认识 Parameters 2.2 设置预览尺寸 2.3添加预览 Surface 2.4 开启和关…