C++ —— 返回数组指针的函数 和 返回指向函数的指针的函数
返回数组指针的函数
基础知识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用。
定义一个 返回数组指针的函数 的方法,以 一个接收参数为 含有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++ —— 返回数组指针的函数 和 返回指向函数的指针的函数的更多相关文章
- 【C++】如何接收函数return返回来的数组元素
转自 https://www.cnblogs.com/Wade-James/p/7965775.html 我们知道return语句作为被调用函数的结束,返回给调用者函数值.一般来说,是返回一个函数值, ...
- 服务器返回数组,data[0]得到的总是不对?如何处理?
我用asp.net MVC 写了服务器代码,返回数组,ajax怎么处理返回的数组内容? 您好,首先用eval将获得的ajax数据转化成json对象并赋值给一个变量. 比如: var obj=eval( ...
- Thinking in C++: Pointers to members 指向成员的指针
通常来说,一个指针(pointer)是一个存储地址的变量,你能在运行时去改变它,并且指针可以指向数据或函数. 但在C++中,指向成员的指针(pointer-to-member)指向的是class或st ...
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- Const指针 、 指向const的指针 、引用、指针
1. const指针和 指向const的指针 指向const的指针: 不允许通过指针来改变其指向的const值 const double *cptr *cptr = 42; // error! 指针 ...
- [笔记]C++声明返回数组指针的函数
数组指针的声明:type (*name)[size]; 由于数组不能拷贝,所以函数不能返回数组.但是函数可以返回指针和引用,所以函数可以返回数组指针或引用. 和数组指针的声明类似: type (*fu ...
- C语言函数不能返回数组,但可以返回结构体
为什么C语言函数可以返回结构体,却不可以返回数组?有这样的问题并不奇怪,因为C语言数组和结构体本质上都是管理一块内存,那为何编译器要区别对待二者呢? C语言函数为什么不能返回数组? 在C语言程序开发中 ...
- 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果
package com.rui.test; import java.util.Random; /** * @author poseidon * @version 1.0 * @date:2015年10 ...
- 用JS编写一个函数,返回数组中重复出现过的元素
用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: , , , , , , , ]; var getRepeat = function (arr) { var obj = {}; , le ...
随机推荐
- oppo手机屏幕录制的详细操作技巧
说起屏幕录制,肯定我们都使用过各式各样的录屏工具,不管是手机或者电脑自带的,还是第三方录屏工具,是不是都出现过不能正常录屏的,或者没有把声音录制下来等一系列问题,为了给更多的人节约时间,因为笔者使用的 ...
- 学习用Node.js和Elasticsearch构建搜索引擎(6):实际项目中常用命令使用记录
1.检测集群是否健康. curl -XGET 'localhost:9200/_cat/health?v' #后面加一个v表示让输出内容表格显示表头 绿色表示一切正常,黄色表示所有的数据可用但是部分副 ...
- 2018-05-11-机器学习环境安装-I7-GTX960M-UBUNTU1804-CUDA90-CUDNN712-TF180-KERAS-GYM-ATARI-BOX2D
layout: post title: 2018-05-11-机器学习环境安装-I7-GTX960M-UBUNTU1804-CUDA90-CUDNN712-TF180-KERAS-GYM-ATARI- ...
- 新闻思考-阿里进军游戏产业,苹果发力ARM芯片
2018.04.03 大家好,这是我开通博客的第一篇文章,我希望在这里分享我的知识,也学习更多的知识,希望大家学习愉快. 阿里进军游戏产业,拿下旅行青蛙的代理权.腾讯一直在进攻阿里的核心业务:电商和支 ...
- shell编程-语句(八)
if else判断语句 if语句 语法格式1: if 条件 then 语句1 语句2 ... 语句n fi 语法格式2: 常用于终端命令提示符中 if [条件]:then 语句:fi if else语 ...
- c指针类型的作用
指针类型的作用 任何类型的指针占用的空间大小都是相同的(32位CPU是4字节:64位CPU是8字节) 既然任何类型的指针占用的空间大小都是相同的,为什么指针还需要类型呢?指针只是指向了一个内存地址,但 ...
- c/c++连通图的遍历(深度遍历/广度遍历)
连通图的遍历(深度遍历/广度遍历) 概念:图中的所有节点都要遍历到,并且只能遍历一次. 深度遍历 广度遍历 深度遍历 概念:从一个给定的顶点开始,找到一条边,沿着这条边一直遍历. 广度遍历 概念:从一 ...
- Zabbix WMI监控
检查Windows OS是否激活,5表示处于通知模式,1表示已激活 wmi.get[root\cimv2,select LicenseStatus FROM SoftwareLicensingProd ...
- python简单的监控脚本-利用socket、psutil阻止远程主机运行特定程序
python简单的监控脚本-利用socket.psutil阻止远程主机运行特定程序 psutil是一个跨平台的库(http://code.google.com/p/psutil/),能够轻松的实现获取 ...
- Linux 系统出现电流音解决方案
迫于Windows 系统最近的各种故障,今天脱坑换了openSUSE Linux ,在上网途中播放视频时偶尔会出现电流音,虽然影响不大,但是还是进行了一些排查. 通过观察电流音出现时的系统负载的波段, ...