C++学习 数组

目录

数组

 一维数组

数组名

 案例:冒泡排序

二维数组

数组名


数组

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

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

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity3D 场景添加obj模型

有一个立方体的obj模型&#xff1b;将其拖到Assets文件夹节点上&#xff0c;在此节点放手&#xff0c;资源被加入项目&#xff1b; 在右侧显示出对象概览&#xff1b; 点击箭头&#xff0c;显示此模型下的子对象&#xff1b; 然后按住Assets面板中的cube1对象&#xff0c;拖动…

36.RocketMQ之Broker如何实现磁盘文件高性能读写

highlight: arduino-light Broker读写磁盘文件的核心技术:mmap Broker中大量的使用mmap技术去实现CommitLog这种大磁盘文件的高性能读写优化的。 通过之前的学习&#xff0c;我们知道了一点&#xff0c;就是Broker对磁盘文件的写入主要是借助直接写入os cache来实现性能优化的&…

【Java项目】Vue+ElementUI+Ceph实现多类型文件上传功能并实现文件预览功能

文章目录 效果演示前端后端Java 效果演示 先说一下我们的需求&#xff0c;我们的需求就是文件上传&#xff0c;之前的接口是只支持上传图片的&#xff0c;之后需求是需要支持上传pdf&#xff0c;所以我就得换接口&#xff0c;把原先图片上传的接口换为后端ceph&#xff0c;但是…

诚迈科技董事长、统信软件董事长王继平出席全球数字经济大会

7月5日&#xff0c;2023全球数字经济大会“数字未来新一代软件产业高质量发展论坛”在北京大兴隆重举行。论坛以“数字新高地&#xff0c;数创兴未来”为主题&#xff0c;共同探讨产业升级新路径&#xff0c;凝聚数字经济合作新共识&#xff0c;构建数字产业集聚发展新高地。诚…

基于Qt5 实现的简易慕课爬取程序

基于Qt5 实现的简易慕课爬取程序 一、项目概述二、源代码 一、项目概述 名称&#xff1a;MookScrapy 这个项目主要是使用了 Qt 里面的 QNetworkAccessManager 去下载慕课网站的数据 https://coding.imooc.com&#xff0c;也就是这个网站里面的卡片信息。然后做一定的分析和展示…

每次装完 homebrew,ohmyzsh 就会报错:Insecure completion-dependent directories detected:

参考:https://zhuanlan.zhihu.com/p/313037188 这是因为在big sur安装homebrew后&#xff0c;会在/usr/local/share/生成一个zsh文件夹&#xff0c;里面包含了 因此&#xff0c;zsh文件默认设置的权限是775&#xff0c;也就是group user有writer的权利&#xff0c;zsh认为这是…

centos下./configure报错:Permission denied

./configure 文章目录 ./configure报错解决方案使用chmod给./configure赋予x权限sftp给configure文件赋予x权限 ./configure报错 -bash: ./configure: Permission denied解决方案 使用chmod给./configure赋予x权限 sudo chmod x ./configuresftp给configure文件赋予x权限

webrtc源码阅读之h264 RTP打包

本文来分析webrtc打包h264 rtp包的代码&#xff0c;版本m98 一、RTP协议 1.1 RTP协议概述 实时传输协议&#xff08;RTP&#xff09;是一个网络协议&#xff0c;它允许在网络上进行实时的音频和视频数据传输。RTP协议主要用于解决多媒体数据的实时传输问题&#xff0c;特别是…

React + TypeScript 实践

主要内容包括准备知识、如何引入 React、函数式组件的声明方式、Hooks、useRef<T>、useEffect、useMemo<T> / useCallback<T>、自定义 Hooks、默认属性 defaultProps、Types or Interfaces、获取未导出的 Type、Props、常用 Props ts 类型、常用 React 属性类…

macbook安装chatglm2-6b

1、前言 chatglm安装环境还是比较简单的&#xff0c;比起Stable diffusion安装轻松不少。   安装分两部分&#xff0c;一是github的源码&#xff0c;二是Hugging Face上的模型代码&#xff1b;安装过程跟着官方的readme文档就能顺利安装。以下安装内容&#xff0c;绝大部分是…

【C++进阶之路】模拟实现string类

前言 本文所属专栏——【C进阶之路】 上一篇,我们讲解了string类接口的基本使用&#xff0c;今天我们就实战从底层实现自己的string类&#xff0c;当然实现所有的接口难度很大&#xff0c;我们今天主要实现的常用的接口~ 一、String类 ①要点说明 1.为了不与库里面的string冲…

2.SpringBoot运维实用篇

SpringBoot运维实用篇 ​ ​ 下面就从运维实用篇开始讲&#xff0c;在运维实用篇中&#xff0c;我给学习者的定位是玩转配置&#xff0c;为开发实用篇中做各种技术的整合做好准备工作。 主要分为以下内容&#xff1a; SpringBoot程序的打包与运行配置高级多环境开发日志 ​…

Qt day3

完善文本编辑器 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QWidget>namespace Ui { class MainWindow; }class MainWindow : public QWidget {Q_OBJECTpublic:explicit MainWindow(QWidget *parent nullptr);~MainWindow(); public slots:void…

1.计算机是如何工作的(下)

文章目录 4.编程语言&#xff08;Program Language&#xff09;4.1程序&#xff08;Program&#xff09;4.2早期编程4.3编程语言发展 5.操作系统&#xff08;Operating System&#xff09;5.1操作系统的定位5.2什么是进程/任务&#xff08;Process/Task&#xff09;5.3进程控制…

es8.8 集群安装笔记

es8.8 集群安装笔记 配置集群第一步 修改配置文件 本次安装使用centos8 3节点安装&#xff1a; 192.168.182.142 192.168.182.143 192.168.182.144 官网 可以查看详细的安装&#xff0c;安装步骤比较简单 https://www.elastic.co/guide/en/elasticsearch/reference/8.8/rpm.htm…

Cannot find tomcat-9.0.0.M21/bin/setclasspath.sh

问题描述&#xff1a;将linux上的tomcat直接拷贝到以一个路径下&#xff0c;执行sh startup.sh 报错 解决&#xff1a;修改全局变量配置文件 1、vim /etc/profile &#xff08;主要修改如下图所标记的值 &#xff09; 2、source /etc/profile &#xff08;设置环境变量立即…

DynaSLAM 2018论文翻译

Dynaslam:动态场景下的跟踪、建图和图像修复 摘要-场景刚性假设是SLAM算法的典型特征。这种强假设限制了大多数视觉SLAM系统在人口稠密的现实环境中的使用&#xff0c;而这些环境是服务机器人或自动驾驶汽车等几个相关应用的目标。 在本文中&#xff0c;我们提出了一个基于ORB…

OpenCV 入门教程:膨胀和腐蚀操作

OpenCV 入门教程&#xff1a;膨胀和腐蚀操作 导语一、膨胀操作二、腐蚀操作三、示例应用3.1 图像增强3.2 边缘检测 总结 导语 膨胀和腐蚀是图像处理中常用的形态学操作&#xff0c;用于改变图像的形状和结构。在 OpenCV 中&#xff0c;膨胀和腐蚀是基于结构元素的像素操作&…

chatgpt生成pygame opengl实现旋转用图片填充的3d三角形

import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import *def draw_triangle():vertices ((0, 2, 0), # 顶点1(-2, -2, 0), # 顶点2(2, -2, 0) # 顶点3)tex_coords ((1, 2), # 顶点1的纹理坐标(1, 1), # 顶点2的纹理坐标(2, …

R语言绘图丨论文中最常用箱线图绘制教程,自动进行显著性检验和误差线标注

多组比较式箱线图 在科研论文绘图中&#xff0c;对于多组数据进行比较一般采用箱线图的方法&#xff0c;今天分享一下这个经典数据可视化方法&#xff0c;从零开始绘制一张带误差棒并自动计算显著性比较结果的箱线图。 前言&#xff1a;箱线图有什么优势&#xff1f; 数据分布…