函数返回数组的指针

函数返回数组的指针

一、概述

函数不能数组,但是可以返回数组的指针。

由于定义一个返回数组的指针的函数比较烦琐(即使定义了也很难看懂),所以我们要介绍一些简化方法。

二、使用类型别名

方法:

//way1

typedef int arrT[10]; //arrT是类型别名,表示的类型是一个数组(含有10个整数)

//way2

using arrT = int[10]; //同上,arrT是含有10个整数的数组的别名

注:是数组的别名!

于是我们可以这样定义函数:

arrT* func(形参);

解读:func函数返回数组的指针,也即返回一个指向包含10个整数的数组的指针。

三、不使用类型别名

1. 数组的指针

形式:

int arr[10];

int (*p2)[10] = &arr; //p2是一个指向含有10个整数的数组的指针

注:int *p[10];,p是一个含有10个指针的数组。

2. 定义返回数组的指针的函数

形式:

int (*func(parameter_list))[10]; //若去掉括号,则返回的类型是指针的数组

四、使用尾置返回类型

任何函数的定义都能使用尾置返回,但是这种形式对于返回类型比较复杂的函数最有效。

形式:

//func函数返回的是一个指针,并且该指针指向了含有10个整数的数组

auto func(parameter_list) -> int(*)[10]; //在本该出现返回类型的地方象征性地放了一个auto

解读:我们把函数的返回类型放在了形参列表之后,故可以清楚地看到func函数返回的是一个指针。

五、使用decltype

适用于:知道函数返回的指针将指向哪个数组

用法:使用decltype关键字声明返回类型

示例:

int odd[] = {1, 3, 5, 7, 9};

int even[] = {0, 2, 4, 6, 8};

//返回一个指向包含5个整数的数组的指针

decltype(odd) *func(int i)

{

return (i % 2) ? &odd : &even; //返回一个指向数组的指针

}

解读:func使用关键字decltype表示它的返回类型是个指针,并且该指针所指的对象与odd的类型一致。因为odd是数组,所以func返回一个指向包含5个整数的数组的指针。

注意:decltype不负责把数组类型转换成对应的指针,所以decltype的结果是个数组,要想表示func返回指针还必须加上一个*符号。

相关推荐

怎么查苹果账户余额
365bet娱乐登录

怎么查苹果账户余额

📅 08-07 👁️ 9864
关于电容 ESR,ESL的理解
365bet体育投注

关于电容 ESR,ESL的理解

📅 07-01 👁️ 4512