C++ 返回类型:返回数组指针

笔记 · 2023-06-25 · 493 人浏览
C++ 返回类型:返回数组指针

  由于数组“不能拷贝”的特点,函数也无法直接返回一个数组。不过我们可以使用指针或者引用来实现返回数组的目标;通常会返回一个数组指针。

int arr[5] = {1, 2, 3, 4, 5};

int* pa[5];           // 指针数组,pa是包含5个int指针的数组

int(*ap)[5] = &arr;   // 数组指针,ap是一个指针,指向长度为5的int数组

int(*fun(int x))[5];  // 函数声明,fun返回值类型为数组指针

  这里对于函数 fun 的声明,我们可以进行层层解析:

  • fun(int x) :函数名为 fun,形参为 int 类型的 x
  • (* fun(int x)):函数返回的结果,可以执行解引用操作,说明是一个指针
  • (* fun(int x))[5]:函数返回结果解引用之后是一个长度为 5 的数组,说明返回类型是数组指针
  • int(* fun(int x))[5]:数组中元素类型为 int

  数组指针的定义比较繁琐,为了简化定义,我们可以使用关键字 typedef 来定义一个类型的别名:

// 简化函数声明
typedef int arrayT[5];    // 类型别名,arrayT代表长度为5的int数组

arrayT* fun2(int x);      // fun2的返回类型是指向arrayT的指针

  C++ 11 新标准还提供了另一种简化方式,用一个 -> 符号跟在形参列表后面,再把类型单独提出来放到最后。这种方式叫做“尾置返回类型”。

auto fun3(int x) -> int(*)[5];    // 尾置返回类型

// 示例:返回一个指向包含5个整数的数组的指针
auto fn() -> int(*)[5] 
{ 
    // 使用静态数组保证在整个生命周期内存在
    // 函数调用结束后仍然可以通过指针访问有效数据
    static int arr[5] = {1, 2, 3, 4, 5}; 
    return &arr; 
}

  要调用这个函数并接收返回的数组指针,可以使用 auto 关键字自动推导返回类型:

auto ptr = fn();

  现在,ptr 就是一个指向包含5个整数的数组的指针。可以通过 (*ptr)[i] 的方式访问数组的元素。

  尾置返回类型语法在一些复杂的函数返回类型中非常有用,并且可以与其他 C++ 特性(如模板)结合使用。同时也要注意释放动态分配的内存,以防止内存泄漏。


学习链接

cpp
  1. w 2023-06-25

Theme Jasmine by Kent Liao

本网站由 又拍云 提供CDN加速/云存储服务

鄂ICP备2023005457号    鄂公网安备 42011302000815号

欢迎来自 * · * 的用户