返回数组指针的函数

基础知识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用。

定义一个 返回数组指针的函数 的方法,以 一个接收参数为 含有10个整型元素的数组的引用  和 返回一个含有10个整型元素的数组的指针 的函数为例。

法一:(不使用别名)

int (*getCopyArr(int (&arr)[]))[]
{
int (*n)[] = (int (*)[])new int[];
for (int i = ; i < ; i++)
(*n)[i] = arr[i];
return n;
}
//note:该函数返回了分配在堆的数组,如果得到该数组后没有释放内存,会导致内存泄漏,这里仅仅作为示例不考虑该问题

法二:

//尾置返回类型 (C++11标准)
auto getCopyArr2(int(&arr)[])->int(*)[]
{
return getArr(arr);
}

法三:

//使用类型别名(1)
typedef int arrT[]; arrT* getCopyArr3(int(&arr)[])
{
return getArr(arr);
}

法四:

//使用类型别名(2)(C++11 标准)
using arrT2 = int[]; arrT2* getCopyArr4(int(&arr)[])
{
return getArr(arr);
}

声明一个  返回数组指针的函数 的 函数指针的方法:

int (*(*getCA)(int(&)[]))[];
getCA = getArr;
//类似于 int sum(int a, int b)函数
//的函数指针 int(*fun)(int, int);

解读: 由内到外顺序阅读理解,*getCA 的*说明getCA 为一个指针;再往外其右边有形参 (int(&)[10])说明其为一个函数指针,其左边又有一个*说明该函数返回的是一个指针;继续往外,由int [10]包围,说明该返回的指针是一个 含有10个元素的数组的指针;故,该声明为 一个返回数组指针的函数的函数指针

参考博文  和 《C++ primer 第5版》

---------------------------------------------------------------------------------------

最后来两个“提神醒脑”的例子:

//声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*
int (*(*p)[])(int *)
//或
int (*(*p[]))(int *)
//来源
//定义一个含4个元素数组的指针,每个元素为 函数的指针,该函数参数为 一个含10个元素的数组的引用 返回值为 含10个元素的数组的指针
int (*(*getCA[4])(int(&)[]))[];

返回指向函数的指针的函数

基础知识:和数组类似,虽然不能返回一个函数,但是能返回指向函数类型的指针

使用别名:

using F = int(int*,int);
using PF = int(*)(int*,int); PF f1(int); //f1 返回函数指针
F* f2(int); //f2 同上

使用C++11标准的尾置返回类型:

auto f1(int) -> int(*)(int*,in)

直接声明:

int (*f1(int))(int*,int);

解读:由内到外顺序阅读理解,f1(int)有形参说明f1是一个函数,*f1(int) 说明该函数返回一个指针;继续往外发现其由int ()(int*,int)包围,说明该函数返回值为一个函数;故该声明为 一个返回函数指针的函数

C++ —— 返回数组指针的函数 和 返回指向函数的指针的函数的更多相关文章

  1. 【C++】如何接收函数return返回来的数组元素

    转自 https://www.cnblogs.com/Wade-James/p/7965775.html 我们知道return语句作为被调用函数的结束,返回给调用者函数值.一般来说,是返回一个函数值, ...

  2. 服务器返回数组,data[0]得到的总是不对?如何处理?

    我用asp.net MVC 写了服务器代码,返回数组,ajax怎么处理返回的数组内容? 您好,首先用eval将获得的ajax数据转化成json对象并赋值给一个变量. 比如: var obj=eval( ...

  3. Thinking in C++: Pointers to members 指向成员的指针

    通常来说,一个指针(pointer)是一个存储地址的变量,你能在运行时去改变它,并且指针可以指向数据或函数. 但在C++中,指向成员的指针(pointer-to-member)指向的是class或st ...

  4. 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

    [转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...

  5. Const指针 、 指向const的指针 、引用、指针

    1. const指针和 指向const的指针 指向const的指针: 不允许通过指针来改变其指向的const值 const double *cptr *cptr = 42;  // error! 指针 ...

  6. [笔记]C++声明返回数组指针的函数

    数组指针的声明:type (*name)[size]; 由于数组不能拷贝,所以函数不能返回数组.但是函数可以返回指针和引用,所以函数可以返回数组指针或引用. 和数组指针的声明类似: type (*fu ...

  7. C语言函数不能返回数组,但可以返回结构体

    为什么C语言函数可以返回结构体,却不可以返回数组?有这样的问题并不奇怪,因为C语言数组和结构体本质上都是管理一块内存,那为何编译器要区别对待二者呢? C语言函数为什么不能返回数组? 在C语言程序开发中 ...

  8. 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果

    package com.rui.test; import java.util.Random; /** * @author poseidon * @version 1.0 * @date:2015年10 ...

  9. 用JS编写一个函数,返回数组中重复出现过的元素

    用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: , , , , , , , ]; var getRepeat = function (arr) { var obj = {}; , le ...

随机推荐

  1. LNMP的配置与优化

    一.LNMP的下载 LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RadHat/Fedora.Debian/Ubuntu/Raspbian/Deepin VPS或独立主机安 ...

  2. mysql随笔系列-1

    MySQL数据库管理 本人实验所用的MySQL数据库版本:5.5.56-MariaDB MariaDB Server  操作系统:centos7.5 1.创建数据库 MariaDB [(none)]& ...

  3. Android 自定义弹出框带EditText

    EditText 布局页面 edittext_ownername_dialog.xml: <?xml version="1.0" encoding="utf-8&q ...

  4. day15(PYTHON)推导式{生成器,字典,列表,集合}

    #[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理 #[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 # ...

  5. Scala视图界定

    package big.data.analyse.dataSet /** * 视图界定 * Created by zhen on 2018/11/29. */ /*class Pair_NotPerf ...

  6. MongoDB 主从和Replica Set

    目前主要的MongoDB高可用架构包含: 主从架构 Replica set副本集方式 sharding分片 注意:使用高可用架构后ips,qps相比单实例都会有一定程度的下降,其中rs下降不是他太明显 ...

  7. Linux CFS调度器之task_tick_fair处理周期性调度器--Linux进程的管理与调度(二十九)

    1. CFS如何处理周期性调度器 周期性调度器的工作由scheduler_tick函数完成(定义在kernel/sched/core.c, line 2910), 在scheduler_tick中周期 ...

  8. 【2018.08.13 C与C++基础】网络通信:阻塞与非阻塞socket的基本概念及简单实现

    一.前言 最近在做Matalb/Simulink与C/C++的混合编程,主要是完成TCP.UDP.SerialPort等常见通信方式的中间件设计,为Simulink模型提供数据采集及解析模块. 问题在 ...

  9. C语言 统计一串字符中空格键、Tab键、回车键、字母、数字及其他字符的个数(Ctrl+Z终止输入)

    //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ #include<stdio.h> void main(){ , num=, blank=, ...

  10. 超简单的gif图制作工具

    测试成功了: 软件灵者Gif录制1.0 使用方法注意: 扩展: 安卓端想要制作gif可参考此方法(还没测试):https://blog.csdn.net/u012604745/article/deta ...