返回类型和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; }