C++:数组

news/2024/7/8 1:25:41

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


http://lihuaxi.xjx100.cn/news/1572137.html

相关文章

关于建筑八大员(住建厅七大员)考试难不难?合格技巧

关于建筑八大员&#xff08;住建厅七大员&#xff09;考试难不难&#xff1f;合格技巧 建筑八大员分为施工员、质量员、资料员、材料员、机械员、劳务员、标准员等7种大类。电脑考核&#xff0c;系统好几万题目&#xff0c;随机抽取一套匹配给你&#xff0c;每个人考试题目都不…

【yolov5】原理

Focus操作 anchors 先验框 其它 Yolov5的模型主要由Backbone、Neck和Head三部分组成。 Backbone&#xff1a;负责提取输入图像的特征。在Yolov5中&#xff0c;常见的Backbone网络包括CSPDarknet53或ResNet。这些网络都是相对轻量级的&#xff0c;能够在保证较高检测精度的同…

【Linux】详解线程第二篇——用黄牛抢陈奕迅演唱会门票的例子来讲解【 线程互斥与锁 】

线程互斥 与 锁 前言正式开始黄牛抢票demo问题解释if判断。tickets-\-数据不一致 临界资源与临界区互斥锁全局锁局部锁几个问题 互斥锁的原理单个线程时多线程申请锁总结申请锁流程 可重入和线程安全常见的线程不安全的情况常见的线程安全的情况常见不可重入的情况常见可重入的…

利用内存数据库的力量:释放实时数据处理能力

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 通过利用数据的力量&#xff0c;当今企业的目标是在快节奏的数字世界中获得竞争优势。传统的基于磁盘的数据库提供实时数据处理和分析的能力受到数据量、速度和种类的指…

司徒理财:9.25黄金原油周初行情分析及黄金操作策略

黄金走势分析&#xff1a;      黄金从技术分析的角度来看&#xff0c;黄金上周五企稳1920关口迎来震荡回升反弹修复&#xff0c;亚欧盘横盘震荡于1925上方呈现抗跌态势&#xff0c;晚间美盘小幅加速冲高刺破1928一线承压回落震荡收盘&#xff0c;日k线报收震荡回升修复小阳…

如何搭建VUE项目开发环境?

搭建Vue.js项目的开发环境通常包括以下主要步骤&#xff1a; 1、安装Node.js和npm&#xff1a; Vue.js项目需要Node.js和npm&#xff08;Node Package Manager&#xff09;作为基础环境。你可以从Node.js官网下载并安装它们&#xff1a;Node.js官网 安装完成后&#xff0c;你…

信息化发展62

信息系统 信息系统是由相互联系、相互依赖、相互作用的事物或过程组成的具有整体功能和综合行为的统一体。在经济与社会活动中&#xff0c;经常使用“系统”的概念&#xff0c;例如&#xff0c;经济领域中的业务系统和金融系统&#xff0c;自然界中的水利系统和生态系统等。从…

单边循环的快排

快排很多&#xff0c;但是适合自己的就是最好的&#xff0c;这个思想很重要&#xff0c;我分享一个自己一直用的一个思想。 递归肯定是需要的&#xff0c;单边循环三步走 1.先存储 pivot中心值 2.从右边开始找比中心值&#xff08;pivot&#xff09;小的数&#xff0c;然后放在…