返回函数指针的函数

Posted 小菜鸡y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回函数指针的函数相关的知识,希望对你有一定的参考价值。

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

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;
}

 


 

以上是关于返回函数指针的函数的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C Block与函数指针比较

C语言如何声明一个返回函数指针的函数?

更新:C++ 指针片段

C语言 返回指针的函数--指针函数 int* max(int a)

C 语言字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )(代码

c复杂函数指针