跳转到内容

C++ 引用数组

来自代码酷

C++引用数组是C++中一种特殊的数组引用机制,允许通过引用直接操作数组元素或整个数组。与指针不同,引用提供更安全的语法且无需解引用操作。本页将详细介绍其语法、特性、应用场景及注意事项。

基本概念[编辑 | 编辑源代码]

在C++中,引用数组有两种含义: 1. **数组的引用**:对现有数组的别名,通过引用操作整个数组。 2. **引用构成的数组**:存储引用类型元素的数组(C++标准禁止直接定义此类数组,但可通过间接方式实现)。

本节主要讨论第一种情况——数组的引用。

语法格式[编辑 | 编辑源代码]

数组引用的声明需指定数组大小,语法如下:

  
数据类型 (&引用名)[数组大小] = 原数组名;

示例:

  
int arr[5] = {1, 2, 3, 4, 5};  
int (&refArr)[5] = arr;  // refArr是arr的引用

代码示例[编辑 | 编辑源代码]

示例1:基本用法[编辑 | 编辑源代码]

  
#include <iostream>  
using namespace std;  

int main() {  
    int original[3] = {10, 20, 30};  
    int (&ref)[3] = original;  // 引用整个数组  

    ref[0] = 100;  // 修改引用会直接影响原数组  
    cout << original[0] << endl;  // 输出: 100  
    return 0;  
}

输出

  
100  

示例2:函数参数传递[编辑 | 编辑源代码]

数组引用常用于函数参数,避免数组退化为指针:

  
#include <iostream>  
using namespace std;  

void printArray(int (&arr)[4]) {  // 必须指定大小  
    for (int num : arr) {  
        cout << num << " ";  
    }  
    cout << endl;  
}  

int main() {  
    int nums[] = {1, 2, 3, 4};  
    printArray(nums);  // 传递数组引用  
    return 0;  
}

输出

  
1 2 3 4  

注意事项[编辑 | 编辑源代码]

1. **大小必须匹配**:引用数组时,声明的大小需与原数组严格一致。

  
   int a[5];  
   int (&b)[4] = a;  // 错误:大小不匹配

2. **禁止引用临时数组**:不能引用临时生成的数组(如函数返回的局部数组)。

3. **与指针的区别**:

  * 引用必须初始化且不能重新绑定。  
  * 引用自动处理数组维度信息,而指针会丢失大小信息。  

实际应用场景[编辑 | 编辑源代码]

场景1:多维数组处理[编辑 | 编辑源代码]

多维数组的引用需逐层指定大小:

  
void processMatrix(int (&matrix)[3][3]) {  
    for (int i = 0; i < 3; ++i) {  
        for (int j = 0; j < 3; ++j) {  
            matrix[i][j] *= 2;  
        }  
    }  
}

场景2:模板元编程[编辑 | 编辑源代码]

结合模板实现通用数组操作:

  
template <typename T, size_t N>  
void fillArray(T (&arr)[N], T value) {  
    for (T &elem : arr) {  
        elem = value;  
    }  
}

高级主题:引用数组的限制[编辑 | 编辑源代码]

C++标准不允许直接定义存储引用的数组(如 int& arr[5]),但可通过以下方式间接实现:

使用std::reference_wrapper[编辑 | 编辑源代码]

  
#include <functional>  
#include <iostream>  

int main() {  
    int x = 1, y = 2, z = 3;  
    std::reference_wrapper<int> refArr[] = {x, y, z};  

    refArr[0].get() = 10;  // 修改x的值  
    std::cout << x << std::endl;  // 输出: 10  
    return 0;  
}

总结[编辑 | 编辑源代码]

  • 数组引用提供类型安全的数组操作方式,保留数组大小信息。
  • 适用于函数参数传递、模板编程等场景。
  • 直接存储引用的数组需借助std::reference_wrapper实现。

模板:C++ Learning Path Nav