返回类型和return语句
1、返回数组指针
由于数组不能被拷贝,所以函数不能返回数组。
但是函数可以返回数组的指针或引用。
typedef int arrT[10];
using arrT=int[10];<span style="white-space:pre"> </span>//arrT的等价声明
arrT* func(int i);<span style="white-space:pre"> </span>//func返回一个指向含有10个整数的数组的指针
声明一个返回数组指针的函数
type (*function(parameter_list)) [dimension]
type表示元素的类型,dimension表示数组的大小。
使用尾置返回类型
</pre><pre name="code" class="cpp">//func接受一个int类型的实参,返回一个指针,该指针指向含有10个整数的数组
auto func(int i) -> int(*)[10]
使用decltype
int odd[]={1,3,5,7,9};
int even[]={0,2,4,6,8};
//返回一个指针,该指针指向含有5个整数的数组
decltype(odd) *arrPtr(int i)
{
return (i%2)? &odd : &even; //返回一个指向数组的指针
}
2、课后习题代码实现
/*
* 功能:编写一个函数的声明,使其返回数组的引用并且该数组包含10个string对象。
* 时间:2014年5月24日21:29:16
* 作者:cutter_point
*/
/*
int odd[]={1,3,5,7,9};
int even[]={0,2,4,6,8};
//返回一个指针,该指针指向含有5个整数的数组
decltype(odd) *arrPtr(int i)
{
return (i%2)? &odd : &even; //返回一个指向数组的指针
}
*/
#include<iostream>
#include<cstring>>
using namespace std;
/*
typedef string bb[10];
//bb[10]={"aa","bb","cc","dd","ee","ff","gg","hh","ii","jj"};
using bb=string[10];
bb* buf1( )
{
return (string *)bb;
}
bb* (*buf2(const string y))[10]
{
return &bb;
}
auto buf3(int i) -> string (*)[10]
{
return &bb;
}
decltype(bb) *buf4(int i)
{
return &bb;
}
*/
/******************************************************/
//普通返回类型
string (*s1)[10];
string (*buf1())[10]
{
cout<<"This is s1!"<<endl;
return s1;
}
/******************************************************/
/*
//类型别名?这个我还写不出来,我也不知道为什么不行,我正在求助中ing...
typedef string s2[10];
using s2=string[10];
s2 *buf2()
{
cout<<"This is s2!"<<endl;
return &s2;
}
*/
/******************************************************/
//尾置返回类型
string s3[10];
auto buf3() -> string (*)[10]
{
cout<<"This is s3!"<<endl;
return &s3;
}
/******************************************************/
//decltype
string s4[10];
decltype(s4) *buf4()
{
cout<<"This is s4!"<<endl;
return &s4;
}
/******************************************************/
int main()
{
buf1();
buf3();
buf4();
return 0;
}