函数返回数组的指针

一、概述

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

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

二、使用类型别名

方法:

	//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返回指针还必须加上一个*符号。

 

原文地址:https://www.cnblogs.com/xzxl/p/7662874.html