当前位置: 首页 > news >正文

C++:数组

C++中的数组是一种用于存储相同数据类型的元素的数据结构。以下是C++数组的一些特点:

  1. 固定大小:数组在创建时需要指定其大小,而且无法在运行时改变大小。这意味着一旦数组被创建,其大小就是固定的,除非创建一个新的数组。

  2. 同一数据类型:数组中的所有元素必须具有相同的数据类型。这意味着您不能在同一个数组中存储不同类型的数据。

  3. 连续内存分配:数组的元素在内存中是连续存储的,这使得对数组元素的访问非常高效。由于内存连续,可以通过索引来访问元素,而不需要遍历整个数组。

  4. 下标访问数组的元素可以通过下标来访问下标从0开始,即第一个元素的下标是0。例如,myArray[0]表示数组的第一个元素。

  5. 静态分配:C++数组通常在栈上或全局数据段中静态分配内存。这意味着数组的生存期通常受到作用域的限制。

  6. 初始化:数组可以在声明时进行初始化,也可以在后续的代码中进行初始化。如果没有初始化,数组的元素将具有未定义的值。

  7. 长度信息:C++数组没有存储其长度信息,因此在访问数组时需要谨慎,以避免越界访问

  8. 没有自带的边界检查:C++数组不会自动检查数组访问是否越界。如果访问超出了数组的边界,可能会导致未定义的行为,如内存损坏或程序崩溃。

  9. 多维数组:C++支持多维数组,例如二维数组和三维数组,这些数组是数组的数组,通过多个索引来访问元素。

在C++中,有三种主要的方式来定义数组:

1. **静态数组(Static Array)**:静态数组是在编译时分配的,其大小在声明时确定,不可更改。以下是静态数组的定义形式:

   ```cpp
   data_type array_name[array_size];
   ```

   例如,定义一个包含5个整数的静态数组:

   ```cpp
   int myArray[5];
   ```

   这将创建一个名为`myArray`的整数数组,可以存储5个整数。

2. **动态数组(Dynamic Array)**:动态数组的大小在运行时确定,可以根据需要进行调整。在C++中,通常使用指针和`new`或`malloc()`函数来创建动态数组,然后使用`delete`或`free()`函数来释放内存。以下是一个动态整数数组的定义形式:

   ```cpp
   data_type *array_name = new data_type[array_size];
   ```

   例如,创建一个包含10个整数的动态数组:

   ```cpp
   int *myArray = new int[10];
   ```

   在使用完动态数组后,不要忘记释放内存以防止内存泄漏:

   ```cpp
   delete[] myArray; // 释放内存
   ```

   注意:在现代C++中,更推荐使用`std::vector`代替动态数组,因为它提供了更好的安全性和管理功能。

3. **初始化数组(Initialized Array)**:可以在声明数组时同时初始化数组的元素。这种方式的定义形式如下:

   ```cpp
   data_type array_name[array_size] = {initial_values};
   ```

   例如,创建一个包含3个整数并初始化为1、2和3的数组:

   ```cpp
   int myArray[3] = {1, 2, 3};
   ```

   在初始化的时候,如果写入的元素个数小于预定大小?

   如果省略了`initial_values`,数组的元素将初始化为默认值,例如,整数数组的默认值为0。

这些是在C++中定义数组的三种常见方式。选择哪种方式取决于您的需求,静态数组适用于固定大小的数据集,动态数组适用于大小不确定的情况,而初始化数组则用于初始化数组的特定值。

一维数组数组名的用途? 

一维数组的数组名在C++中具有多种用途,包括以下主要方面:

  1. 访问数组元素:数组名用于访问数组中的各个元素。您可以使用下标操作符 [] 来访问特定位置的元素。例如,如果有一个整数数组 myArray,您可以通过 myArray[0]myArray[1] 等方式来访问数组中的不同元素。

    int myArray[] = {1, 2, 3, 4, 5};
    int element = myArray[2]; // 访问数组的第三个元素(索引为2)
    

    2.传递给函数:数组名可以作为参数传递给函数,使函数能够访问和操作数组中的元素。这允许函数在不返回任何值的情况下修改数组的内容。在函数内部,数组名会被解释为指向数组的首元素的指针。

    void modifyArray(int arr[], int size) {for (int i = 0; i < size; ++i) {arr[i] *= 2; // 修改数组中的元素}
    }int main() {int myArray[] = {1, 2, 3, 4, 5};modifyArray(myArray, 5); // 传递数组给函数// myArray 现在包含 {2, 4, 6, 8, 10}return 0;
    }
    

    3.获取数组大小:通过使用数组名和 sizeof 运算符,可以获取数组的大小(以字节为单位)。这对于在编程中动态计算数组的大小非常有用。(每一个int占据四个字节)

    int myArray[] = {1, 2, 3, 4, 5};
    int size = sizeof(myArray) / sizeof(myArray[0]); // 计算数组的大小
    

    4.获取数组的首项地址:在C++中,数组的地址是指向数组首元素的指针。可以使用数组名来获取数组的地址,也可以使用取地址运算符(&)来获取。

    以下是获取数组地址的示例:

    int myArray[] = {1, 2, 3, 4, 5};// 使用数组名获取数组地址
    int* arrayAddress = myArray;// 或者使用取地址运算符获取数组地址
    int* arrayAddress2 = &myArray[0];// 输出数组地址的值
    std::cout << "Array Address 1: " << arrayAddress << std::endl;
    std::cout << "Array Address 2: " << arrayAddress2 << std::endl;
    

    注意:甚至可以

    cout << arr << endl;

    来直接获取其首地址。稍微优化一下还可以:

    cout << int(arr) << endl;
    cout << int(&arr[0]) <<endl

相关文章:

C++:数组

C中的数组是一种用于存储相同数据类型的元素的数据结构。以下是C数组的一些特点&#xff1a; 固定大小&#xff1a;数组在创建时需要指定其大小&#xff0c;而且无法在运行时改变大小。这意味着一旦数组被创建&#xff0c;其大小就是固定的&#xff0c;除非创建一个新的数组。 …...

结合Mockjs与Bus事件总线搭建首页导航和左侧菜单

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…...

模拟桌面自动整理, 先顶左,再顶上。

5 6 **##** ****#* ***##* #***** ***#** ##**** ##**** #***** #***** #***** #include<iostream> using namespace std; #define MAX 1024char a[MAX][MAX]; void H(char arr[][MAX], int n,int idx) {//n列数 ,idx 某行int left 0;int right n - 1;char t;while (…...

新增MariaDB数据库管理、支持多版本MySQL数据库共存,1Panel开源面板v1.6.0发布

2023年9月18日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.6.0版本。 在这个版本中&#xff0c;1Panel新增MariaDB数据库管理&#xff1b;支持多版本MySQL数据库共存&#xff1b;支持定时备份系统快照和应用商店中已安装应用&#xff1b;支持为防火墙…...

【dbeaver】win环境的kerberos认证和Clouders集群中Kerberos认证使用Dbeaver连接Hive和Phoenix

一、下载驱动 cloudera官网 1.1 官网页面下载 下载页面 的Database Drivers 挑选比较新的版本即可。 1.2 集群下载 Hive可能集群没有驱动包。驱动包名称&#xff1a;HiveJDBC42.jar。41结尾的包也可以使用的。注意Jar包的大小一定是十几MB的。几百KB的是thin包不可用。 …...

MongoDB索引

索引支持在MongoDB中高效执行查询。如果没有索引&#xff0c;MongoDB必须扫描集合中的每个文档才能返回查询结果。如果查询存在适当的索引&#xff0c;MongoDB将使用该索引来限制它必须扫描的文档数。 尽管索引提高了查询性能&#xff0c;但添加索引对写入操作的性能有负面影响…...

ChatGPT的问世给哪些行业带来了冲击?

目录 引言Chat GPT 对行业的影响在线客服和智能客服行业传统自动回复机器人的局限性Chat GPT 的提升能力 教育培训行业个性化学习需求的挑战Chat GPT 的个性化优势 金融保险行业客户服务的变革Chat GPT 的智能化应用 医疗健康领域自助诊断及咨询的便利性Chat GPT 在医疗领域的应…...

Elasticsearch:与多个 PDF 聊天 | LangChain Python 应用教程(免费 LLMs 和嵌入)

在本博客中&#xff0c;你将学习创建一个 LangChain 应用程序&#xff0c;以使用 ChatGPT API 和 Huggingface 语言模型与多个 PDF 文件聊天。 如上所示&#xff0c;我们在最最左边摄入 PDF 文件&#xff0c;并它们连成一起&#xff0c;并分为不同的 chunks。我们可以通过使用 …...

docker系列(7) - Dockerfile

文章目录 7. Dockerfile7.1 Dockerfile介绍7.2 指令规则7.3 指令说明7.3.1 RUN命令的两种格式7.3.1 CMD命令覆盖问题7.3.2 ENTRYPOINT命令使用7.3.3 ENV的使用 7.4 构建tomcat Dockerfile案例7.4.1 准备原始文件7.4.2 编写Dockerfile7.4.3 构建镜像7.4.4 验证镜像 7.5 构建jdk基…...

Spring面试题8:面试官:说一说Spring的BeanFactory

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的BeanFactory Spring的BeanFactory是Spring框架的核心容器,负责管理和创建Bean对象。它是一个工厂类,用于实例化、配置和管理Bean的…...

Win10专业版系统一键重装怎么操作?

Win10专业版系统一键重装怎么操作&#xff1f;与传统的系统重装相比&#xff0c;一键重装不仅省去了繁琐的安装步骤&#xff0c;这一简单操作使得系统维护和恢复变得更加便捷&#xff0c;让用户不再为系统问题而烦恼。下面小编给大家详细介绍关于一键重装Win10专业版系统的操作…...

十大服装店收银系统有哪些 好用的服装收银软件推荐

服装店收银系统对于门店和服装卖场来说非常重要&#xff0c;可以提高工作效率。下面是推荐的十大服装店收银系统&#xff0c;供开设服装店的企业选择合适的收银软件用于经营管理。 1、核货宝收银系统 支持快速收银&#xff0c;同时适用于服装行业&#xff0c;能够支持多规格多…...

算法通过村第八关-树(深度优先)白银笔记|深度和高度问题

文章目录 前言1. 最大深度问题2. 判断平衡树3. 最小深度4. N叉树的最大深度总结 前言 提示&#xff1a;我的整个生命&#xff0c;只是一场为了提升社会地位的低俗斗争。--埃莱娜费兰特《失踪的孩子》 这一关我们看一些比较特别的题目&#xff0c;关于二叉树的深度和高度问题。这…...

Redis安装和使用

这里写目录标题 Redis安装和使用一.数据库类型1.关系型数据库2.非关系型数据库3.区别&#xff08;1&#xff09;数据存储方式不同&#xff08;2&#xff09;扩展方式不同&#xff08;3&#xff09;对事务性的支持不同 二.redis简介1.Redis 优点2.哪些数据适合放入缓存中&#x…...

UML基础与应用之面向对象

UML&#xff08;Unified Modeling Language&#xff09;是一种用于软件系统建模的标准化语言&#xff0c;它使用图形符号和文本来描述软件系统的结构、行为和交互。在面向对象编程中&#xff0c;UML被广泛应用于软件系统的设计和分析阶段。本文将总结UML基础与应用之面向对象的…...

将 Ordinals 与比特币智能合约集成:第 2 部分

在上一篇文章中&#xff0c;我们展示了一种将 Ordinal 与智能合约集成的方法&#xff0c;即将Ordinal和合约放在同一个 UTXO 中。 今天&#xff0c;我们介绍了一种集成它们的替代方案&#xff0c;即它们位于单独的 UTXO 中。 作为展示&#xff0c;我们开发了一个智能合约&…...

PCL 法线空间采样(C++详细过程版)

法线空间采样 一、概述二、代码实现三、结果展示1、原始点云2、采样结果一、概述 法线空间采样在PCL里有现成的调用函数,具体算法原理和实现代码见:PCL 法线空间采样。为充分了解法线空间采样算法实现的每一个细节和有待改进的地方,使用C++代码对算法实现过程进行复现。 二…...

论文阅读:AugGAN: Cross Domain Adaptation with GAN-based Data Augmentation

Abstract 基于GAN的图像转换方法存在两个缺陷&#xff1a;保留图像目标和保持图像转换前后的一致性&#xff0c;这导致不能用它生成大量不同域的训练数据。论文提出了一种结构感知(Structure-aware)的图像转换网络(image-to-image translation network)。 Proposed Framework…...

CNC 3D浮雕 Aspire 11.55 Crack

Aspire 提供了功能强大且直观的软件解决方案&#xff0c;用于在 CNC 铣床上创建和切割零件。有用于 2D 设计和计算 2D 刀具路径的工具&#xff0c;例如仿形、型腔加工和钻孔以及 2.5D 刀具路径&#xff0c;包括&#xff1a;V 形雕刻、棱镜雕刻、成型刀具路径、凹槽、 倒角刀具路…...

【Clickhouse2022.02 查询优化】

一、现场场景概述 现场每天每张表入库数据量大约2-4亿条,页面涉及到自定义时间段查询(白天08:00-15:00,夜晚23:00-06:00)与不同时间段(最近一天、一周、一个月和全部)的统计指标查询。 二、主要问题 时间跨度大无查询或查询条件命中数据过多的分页查询场景速度慢 (主要是数据…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...

用js实现常见排序算法

以下是几种常见排序算法的 JS实现&#xff0c;包括选择排序、冒泡排序、插入排序、快速排序和归并排序&#xff0c;以及每种算法的特点和复杂度分析 1. 选择排序&#xff08;Selection Sort&#xff09; 核心思想&#xff1a;每次从未排序部分选择最小元素&#xff0c;与未排…...

day51 python CBAM注意力

目录 一、CBAM 模块简介 二、CBAM 模块的实现 &#xff08;一&#xff09;通道注意力模块 &#xff08;二&#xff09;空间注意力模块 &#xff08;三&#xff09;CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...