C++之返回陣列指標
阿新 • • 發佈:2019-02-20
因為陣列不能被拷貝,所以函式不能返回陣列。不過函式可以返回陣列的指標或者引用,今天我們一起來學習下C++下的幾種返回陣列指標的方法
一、類型別名
這是返回陣列指標最直接的一種方法了
#include<iostream>
using namespace std;
typedef int arrT[10];//類型別名,表示含有10個整形的陣列
//using arrT = int[10]; //arrT的等價宣告,c++11版本新加的
int arry[10] = {1,2,3,4,5,6,7,8,9,10};
arrT* func()
{
return &arry;
}
int main()
{
int (*p)[10] =func();
for(int i=0;i<10;i++)
{
cout<<(**p)++<<" "<<endl;
}
return 0;
}
列印結果:
二、後接陣列維度
Type (*function(parameter_list))[dimension]
類似於其他陣列的宣告,Type表示元素的型別,dimension表示陣列的大小。
(*function(parameter_list))兩端的括號必須存在,就像我們定義p2時兩端必須有括號一樣,如果沒有這對括號,函式的返回型別將是指標的陣列。
int arr[10]; //arr是一個含有10個整數的陣列
int *p1[10]; //p1是一個含有10個指標的陣列
int (*p2)[10] = &arr; //p2是一個指標,指向含有10個整數的陣列。
原始碼:
#include<iostream>
using namespace std;
int arry[10] = {1,2,3,4,5,6,7,8,9,10};
int (*func())[10]
{
return &arry;
}
int main()
{
int (*p)[10] =func();
for(int i=0;i<10;i++)
{
cout<<(**p)++<<" ";
}
cout<<endl;
return 0;
}
列印結果:
三、使用尾置返回型別
在C++11中新增了一種方法,任何函式的定義都能使用尾置返回,但是這種形式對於返回型別教複雜的型別最有效,比如返回型別是陣列的指標或者是陣列的引用時。尾置返回型別跟在形參列表後面並以一個->符號開頭。為了表示函式真正的返回型別跟在形參列表之後,在本應該出現返回型別的地方仿置一個auto。
原始碼:
#include<iostream>
using namespace std;
int arry[10] = {1,2,3,4,5,6,7,8,9,10};
auto func() -> int(*)[10]
{
return &arry;
}
int main()
{
int (*p)[10] =func();
for(int i=0;i<10;i++)
{
cout<<(**p)++<<" ";
}
cout<<endl;
return 0;
}
列印結果:
四、使用decltype
如果我們知道函式返回的指標將指向哪個陣列,就可以使用decltype關鍵字宣告返回型別。
原始碼:
#include<iostream>
using namespace std;
int arry[10] = {1,2,3,4,5,6,7,8,9,10};
decltype(arry) *func()
{
return &arry;
}
int main()
{
int (*p)[10] =func();
for(int i=0;i<10;i++)
{
cout<<(**p)++<<" ";
}
cout<<endl;
return 0;
}
列印結果:
decltype並不負責把陣列型別轉換成對應的指標,所以decltype的結果是一個數組,要想func返回指標還必須在函式宣告時加一個*符號。