函數返回數組的指針


一、概述

函數不能數組,但是可以返回數組的指針。

由於定義一個返回數組的指針的函數比較煩瑣(即使定義了也很難看懂),所以我們要介紹一些簡化方法。

 

二、使用類型別名

方法:

	//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返回指針還必須加上一個*符號。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM