C++通过引用传递数组

数组形参可以声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。

在这种情况下,数组大小成为形参和实参类型的一部分(实参长度与形参长度不同时,编译报错)。

void printValue(int (&a)[5]){...}

int main(){

int i=0;

int j[2]={0,1};

int k[5]={0,1,2,3,4};

printValue(i);//编译报错

printValue(j); //编译报错

printValue(k); //编译OK

return 0;

}

C++多维数组的传递

C++中没有多维数组,多维数组实际是数组的数组。传参时,形参除了第一维以外的所有维的长度都是元素类型的一部分,必须明确指定。

void printValue(int (*a)[5], int row_size) {...}

int (*a)[5]:表示a是指向长度为5的整型数组的指针。

括号是必须的,因为:
int (*a)[5]:表示a是指向长度为5的整型数组的指针。

int *a[5]:表示a是长度为5的数组,每个元素都是int*类型(a是指针的数组)。

C++指向函数的指针

函数指针指向一个函数,函数指针也有特定的类型,这个类型由函数的返回值类型和形参表确定,与函数名无关。

bool (*pf)(const string &, const string &);

这个语句将pf声明为一个指向函数的指针,它所指向的函数带有两个const string &类型的参数,返回值为bool类型。

typedef bool (*cmpFunc)(const string &, const string &);

该语句表示cmpFunc是一种指向函数的指针类型的名字(!类型名)。

cmpFunc f1 = my_func;

函数指针只能用同类型的函数或函数指针、或0值敞亮表达式来初始化或赋值。

返回指向函数的指针

函数可以返回一个函数指针。

double (*ff(int))(char*,long);

ff是一个函数,ff的参数是int类型,ff的返回值是一个函数指针,这个函数指针类型(形参表为char*,long,返回值类型为double)如下:

double (*)(char*,long);

在使用函数指针时,可以通过函数指针或者接引用的函数指针调用函数。

例如:

pf(“aa”,”bb”);

(*pf)(“aa”,”bb”);

函数指针作为形参时,可以是函数指针。

typedef bool (*cmpFunc)(const string &, const string &);

void f1(cmpFunc); //OK

C++ 补遗的更多相关文章

  1. C#插件构架实战 + Visual C#插件构架实战补遗(转)

    C#插件构架实战 C# 插件构架实战 Jack H Hansen [ 2004-07-27 ] Keywords C# 插件 反射(System.Reflection) 属性(System.Attri ...

  2. 转-Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable

    转-http://snowolf.iteye.com/blog/1628861/ Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariab ...

  3. Linux转发性能评估与优化-转发瓶颈分析与解决方式(补遗)

    补遗 关于网络接收的软中断负载均衡,已经有了成熟的方案,可是该方案并不特别适合数据包转发,它对server的小包处理非常好.这就是RPS.我针对RPS做了一个patch.提升了其转发效率. 下面是我转 ...

  4. Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable (转)

    最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...

  5. Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable(转)

    最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...

  6. pcapng文件的python解析实例以及抓包补遗

    为了弥补pcap文件的缺陷,让抓包文件可以容纳更多的信息,pcapng格式应运而生.关于它的介绍详见<PCAP Next Generation Dump File Format> 当前的w ...

  7. [Erlang 0124] Erlang Unicode 两三事 - 补遗

    最近看了Erlang User Conference 2013上patrik分享的BRING UNICODE TO ERLANG!视频,这个分享很好的梳理了Erlang Unicode相关的问题,基本 ...

  8. odoo8.0 win7 64位 安装配置(补遗)

    各种参考博客资源--http://www.cnblogs.com/yiguxianyun/p/6256641.html 最开始蛋疼问题的是安装各种site-packages! 云盘里面有些win764 ...

  9. Django补遗(一)

    链接MYSQL数据库 修改项目中的配置文件: DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME' ...

  10. 拥抱.NET Core,学习.NET Core的基础知识补遗

    前言 .NET Core的新特性之一就是跨平台,但由于对之前框架的兼容导致编写一个.NET Core类库变得相当复杂,主要体现为相当多的框架目标和支持平台,今天我们就对.NET Core的跨平台特性进 ...

随机推荐

  1. centos7装NVIDIA显卡驱动

    一.系统及显卡 系统:centos7.5 64位 显卡:gtx 1060 前几天主要是有一个人脸识别的项目测试,需要用到显卡去测试性能,然后装显卡的过程折腾了一下,特此记录. 二.安装过程 1. 下载 ...

  2. spring-boot基础概念与简单应用

    1.spring家族 2.应用开发模式 2.1单体式应用 2.2微服务架构 微服务架构中每个服务都可以有自己的数据库  3.微服务架构应当注意的细节 3.1关于"持续集成,持续交付,持续部署 ...

  3. php自定义session存储路径

    1.找到php.ini配置文件,找到session.save_path,修改如下: 其中2表示session存储的目录深度,也就是分目录,避免一个目录下文件太多,造成IO负担. session.sav ...

  4. OAuth2.0 Owin 授权问题

    http://www.cnblogs.com/dudu/p/4569857.html OAuth2.0 一.什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前 ...

  5. .NET资源文件实现多语言切换

    1.创建对应的资源文件 lang.en.resx  英文 lang.resx   中文,默认 lang.zh-tw.resx  繁体 首先说明,这三个文件前面部分名称需要一样,只是 点 后面的语言代号 ...

  6. Adplus 抓取Crash Dump

    本实例在win8.1 安装window kits https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit 1 ...

  7. Golang之定时器,recover

    滴答滴答……定时器的使用 package main import ( "fmt" "time" ) //定时器的使用 func main() { t := ti ...

  8. linux下安装oracle数据库详细教程

    一.安装yum源 下载或拷贝RedHat的iso镜像到本地,比如 /repo/iso/ rhel-server-6.6-x86_64-dvd.iso 1.建立ISO文件存放目录(/repo/iso)和 ...

  9. C语言文本处理

    一.conf文本 http://blog.163.com/lixiangqiu_9202/blog/static/53575037201431743236762/ http://blog.csdn.n ...

  10. Java数据结构和算法(一)树

    Java数据结构和算法(一)树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 前面讲到的链表.栈和队列都是一对一的线性结构, ...