首页 > 代码库 > 【足迹C++ primer】11、返回类型和return语句(1)

【足迹C++ primer】11、返回类型和return语句(1)

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