C++ 补遗
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++ 补遗的更多相关文章
- C#插件构架实战 + Visual C#插件构架实战补遗(转)
C#插件构架实战 C# 插件构架实战 Jack H Hansen [ 2004-07-27 ] Keywords C# 插件 反射(System.Reflection) 属性(System.Attri ...
- 转-Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
转-http://snowolf.iteye.com/blog/1628861/ Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariab ...
- Linux转发性能评估与优化-转发瓶颈分析与解决方式(补遗)
补遗 关于网络接收的软中断负载均衡,已经有了成熟的方案,可是该方案并不特别适合数据包转发,它对server的小包处理非常好.这就是RPS.我针对RPS做了一个patch.提升了其转发效率. 下面是我转 ...
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable (转)
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable(转)
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- pcapng文件的python解析实例以及抓包补遗
为了弥补pcap文件的缺陷,让抓包文件可以容纳更多的信息,pcapng格式应运而生.关于它的介绍详见<PCAP Next Generation Dump File Format> 当前的w ...
- [Erlang 0124] Erlang Unicode 两三事 - 补遗
最近看了Erlang User Conference 2013上patrik分享的BRING UNICODE TO ERLANG!视频,这个分享很好的梳理了Erlang Unicode相关的问题,基本 ...
- odoo8.0 win7 64位 安装配置(补遗)
各种参考博客资源--http://www.cnblogs.com/yiguxianyun/p/6256641.html 最开始蛋疼问题的是安装各种site-packages! 云盘里面有些win764 ...
- Django补遗(一)
链接MYSQL数据库 修改项目中的配置文件: DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME' ...
- 拥抱.NET Core,学习.NET Core的基础知识补遗
前言 .NET Core的新特性之一就是跨平台,但由于对之前框架的兼容导致编写一个.NET Core类库变得相当复杂,主要体现为相当多的框架目标和支持平台,今天我们就对.NET Core的跨平台特性进 ...
随机推荐
- easyUIDataGrid分页
package com.cn.eport.util; import java.util.List; /** * * * @author zh * */ public class DataGrid im ...
- Struct2总结
摘自<javaWeb整合开发王者归来> 一.Struct2工作流程 1.访问jsp页面 /struts2/login.jsp 2.提交表单后数据提交给 /struts2/loginPer ...
- 【校招面试 之 C/C++】第13题 C++ 指针和引用的区别
1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int ...
- C++ 模板的全特化与偏特化
模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的. 模板分为类模板与函数模板,特化分为全特化与偏特化.全特化就是限定死模板实现的具体类型,偏特化就是如果这 ...
- 如何进入/home/user/.wine
命令行输入 :cd /home/user/.wine/drive_c/windows/fonts /home是linux的用户目录,/user是用户名/.wine是隐藏目录,凡是以.开头的都是隐藏目录 ...
- VC++ 定时器使用总结
VC++ WM_TIMER 定时器使用方法 在编程时,会经常使用到定时器.使用定时器的方法比较简单,通常告诉Windows一个时间间隔,然后WINDOWS以此时间间隔周期性触发程 ...
- Combobox实现多项选择 Silverlight下“Combobox”怎样实现多项选择?
把 combobox里面的项换成checkedbox 示例: combobox cbb=new combobox(); ) { CheckBox cb = new CheckBox(); cb.Com ...
- 使用jmeter工具测试上传接口
1.方法选择post:上传都是post上传. 2.路径输入正确的上传接口路径,并勾选Use multipart/form-data for POST 3.添加文件,文件路径尽量不要有中文,防止编码问题 ...
- Region特征算子与形态学运算——第3讲
问题提出:求下图中楔形缺口到圆心的最短距离. [涉及知识点讲解] 一.Region特征算子 在图形窗口中用鼠标单击选中某个Region,然后点击菜单栏的“打开特征检测”图标,就可以看到当前Regi ...
- laravel增删改查(查询构建器)
1.增 $data = [ 'username' => 'xiaohong', 'nickname' => '小红红', 'email' => '12356788@qq.com', ...