返回函数指针的函数
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; }
以上是关于返回函数指针的函数的主要内容,如果未能解决你的问题,请参考以下文章
C语言 返回指针的函数--指针函数 int* max(int a)
C 语言字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )(代码