[作者]
常用网名: 猪头三
出生日期: 1981.XX.XX
企鹅交流: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共24年]
职业生涯: 22年
开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、
开发工具: Visual Studio、Delphi、XCode、C++ Builder、Eclipse
技能种类: 逆向 驱动 磁盘 文件 大数据分析
涉及领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 股票模型量化/磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测
专注研究: 机器学习、股票模型量化、金融分析

[序言]
在现代C++中, 数组作为一种基础的数据结构, 广泛应用于各种编程场景中. 然而, 当面对复杂的数组声明时, 会感到困惑, 尤其是涉及到指针, 引用以及类型别名等概念时. 这些复杂的声明不仅影响代码的可读性, 还可能导致潜在的错误. 因此, 理解现代C++中数组的声明规则及其相关概念显得尤为重要.

[代码演示]

int main() {
    // 为含有10个int类型元素的数组定义一个别名
    typedef int int_Array_T[10];
    using int_Array_Other_T = int[10];

    // 声明一个普通的数组并初始化
    int int_Array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    // 特别注意细节:
    // 这是一个含有10个指向int类型指针的数组
    int* int_pointer_Array[10];

    // pint_Array 指向一个含有10个整数的数组
    int (*pint_Array)[10] = &int_Array;

    // ref_int_Array 引用一个含有10个整数的数组
    int (&ref_int_Array)[10] = int_Array;

    // 通过pint_Array和ref_int_Array修改int_Array数组的内容
    (*pint_Array)[0] = 2;  // 修改第0个元素为2
    ref_int_Array[1] = 3;  // 修改第1个元素为3

    return 0;
}

[代码说明]
1. 类型别名的定义
    在代码中, 使用typedef和using关键字为含有10个int类型元素的数组定义了两个别名:  
    * typedef int int_Array_T[10]; 定义了一个类型别名int_Array_T, 表示含有10个int的数组.  
    * using int_Array_Other_T = int[10]; 是现代C++中推荐的写法, 功能与typedef相同, 但语法更直观.

2. 普通数组的声明与初始化
   int int_Array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 定义并初始化了一个含有10个整数的数组int_Array. 这里使用了初始化列表, 依次填充数组的元素. 这种方式简单直观, 是数组的常见用法. 

3. 指针数组的声明
   int* int_pointer_Array[10]; 声明了一个数组int_pointer_Array, 它包含10个指向int类型的指针. 需要特别注意, 这与指向数组的指针不同. int*表示每个元素是指针类型, 而[10]表示数组的大小, 因此这是一个“指针数组”, 而不是“数组指针”.

4. 指向数组的指针
   int (*pint_Array)[10] = &int_Array; 定义了一个指向含有10个int元素数组的指针pint_Array.  
   * (*pint_Array)表示这是一个指针, 指向的对象是一个数组. 
   * [10]指定了数组的大小.  
   * &int_Array取的是整个数组的地址, 而不是首元素的地址

5. 数组引用
   int (&ref_int_Array)[10] = int_Array; 定义了一个引用ref_int_Array, 它绑定到含有10个int元素的数组int_Array. 
   * (&ref_int_Array)表示这是一个引用.  
   * [10]指定了引用的数组大小.  
   * 由于是引用, ref_int_Array可以直接像数组一样使用, 例如ref_int_Array[1].

6. 通过指针和引用修改数组
   * (*pint_Array)[0] = 2; 通过解引用指针pint_Array修改int_Array的第0个元素为2.
   * ref_int_Array[1] = 3; 通过引用ref_int_Array直接修改int_Array的第1个元素为3.

[总结]
现代C++中数组声明的关键性概念, 包括普通数组, 指针数组, 指向数组的指针, 数组引用以及类型别名, 这些知识点是理解复杂数组声明的基础, 通过类型别名(如typedef和using), 可以简化复杂的类型定义; 通过正确使用指针和引用, 能够灵活操作数组并提高代码的可维护性.

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐