码迷,mamicode.com
首页 > 其他好文 > 详细

返回函数指针的函数

时间:2016-06-02 21:42:29      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

首先,数组不能被拷贝,所以函数不能返回数组,但可以返回数组的指针或引用,返回数组的指针有一下几种方式:

1.使用类型别名

#include <iostream> 
using namespace std;
int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
typedef int type[10];           //或using type=int[10],type是类型别名
type *sum(int(&a)[10])            
{
    return &a;                //不能返回局部变量的指针或引用,所以函数形参采 &     
}

int main(int argc,char *argv[])
{    
    int(*p)[10] = sum(b);
    int *a = *p;
    for (int i = 0; i < 10; i++)
        cout << *(a + i) << endl;;
    return 1;
}

2.直接定义  

#include <iostream> 
 using namespace std;
int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
 int(*sum(int(&a)[10]))[10]    //数组的维度放在最后
 {
     return &a;
 }
  
 int main(int argc,char *argv[])
 {    
     int(*p)[10] = sum(b);
     int *a = *p;
     for (int i = 0; i < 10; i++)
         cout << *a++<< endl;;
     return 1;
 }

3.使用auto

#include <iostream> 
using namespace std;
int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
auto sum(int(&a)[10])->int(*)[10]            //auto fun(形参列表)->int(*)[10],将真正的类型写后面
{
    return &a;
}

int main(int argc,char *argv[])
{    
    int(*p)[10] = sum(b);
    int *a = *p;
    for (int i = 0; i < 10; i++)
        cout << *a++<< endl;;
    return 1;
}

4.使用decltype

#include <iostream> 
using namespace std;
int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
decltype(b) *sum(int(&a)[10])           //使用decltype
{
    return &a;
}

int main(int argc,char *argv[])
{    
    int(*p)[10] = sum(b);
    int *a = *p;
    for (int i = 0; i < 10; i++)
        cout << *a++<< endl;;
    return 1;
}

 


 

返回函数指针的函数

标签:

原文地址:http://www.cnblogs.com/mrlsx/p/5554278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!