一、基础

  1. 实参是形参的初始值,对每个形参都需要穿一个能转换为它的实参
  2. 形参列表中的形参通常用逗号隔开,其中每个形参都含有一个声明符的声明

二、main(int argc, char *argv[])

有时我们需要给main穿递实参,常见的情况是用户通过设置一组选项确定函数所要执行的操作

argc---->代表argv中的元素个数,argv---->代表元素为char *的指针数组

cmd下:

通过执行main函数所在的可执行文件prog.exe

prog -d -o ofile data0

向main内传参

argv[0] 通常是函数名或者一个空字符串,可选的实参从argv开始

三、传引用参数与const情况(省略一部分简单情况)

引用参数 目的:使用引用避免拷贝,加快效率

关于重载函数的一部分:void fcn(const int i) 与 void fcn(int i)是一样的,因为形参的初始化和变量的初始

化方式是一样的,const int i在初始化是忽略顶层const

把不会改变的形参定义为常量引用,对要改变的定义为普通引用

eg:

bool is_sentence1(const string &s){...}
bool is_sentence2(string &s){...}

常量引用形参的实参可以是对象或者常量,但不可以"改变形参"

普通引用可以"改变形参",但实参只能是对象

四、数组形参和const

通常的形参情形:

一维的
void print(const int *)
void print(const int[]);
void print(const int[10]);
二维的
void print(int (*matrix)[10]);

数组引用形参形式:void print(int (&arr)[10])--->像这样的形参只能将函数作用于大小为10的数组

分析:

因为形参的初始化和变量的初始化方式是一样的--->书上说的

但我们并不能

void func(int a[]){...}
or
void func(int *a){...} -->比如字符串就可以如此
int main(){
func({0,1,2,3});
return 0;
}

如何能func({0, 1, 2, 3}) 成功?(根据报错可知传递{0, 1, 2, 3}是"brace-enclosed initializer list"类型)

1.通过c11的initializer_list标准库类型()

2.通过void func(const int (&a)[4])的形参设置-->const使得可以接收常量实参,int (&a)[4]的想法和之前

对for范围循环的特性二有关,int (&a)[4]才能完整传递数组且得知道数组大小--->个人看法

五、含有可变参数的形参

  1. initializer_list--->同vector一样是模板类型,但元素永远是常量

    void error_msg(initializer_list il){....}

    error_msg({'lalalal', 'your error'})
  2. 省略符类型

    void foo(parm_list, ...);

    or

    void foo(...);

    只能这样两者形式,详情见C++省略符

C++:参数的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(6):方法参数

    本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...

  2. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  3. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  4. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  5. 【每日一linux命令4】常用参数:

     下面所列的是常见的参数(选项)义: --help,-h                              显示帮助信息 --version,-V                        ...

  6. 【每日一linux命令3】参数(或称选项)顺序

    一般除了特殊情况,参数是没有顺序的.举例而言,输入"–a –v"与输入"–v –a"以及"–av" 的执行效果是相同的.但若该参数后指定了要 ...

  7. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  8. js中参数不对应问题

    因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java和C#一样对其传入参数的类型进行定义.那么传入参数的个数有没有影响呢?今天小猪就做了个实 ...

  9. C++中的变长参数

    新参与的项目中,为了使用共享内存和自定义内存池,我们自己定义了MemNew函数,且在函数内部对于非pod类型自动执行构造函数.在需要的地方调用自定义的MemNew函数.这样就带来一个问题,使用stl的 ...

  10. nodejs进阶(5)—接收请求参数

    1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...

随机推荐

  1. WIN32_FIND_DATA 详细结构(附循环读取文件代码)

    //去除路径最后多余的斜杠和反斜杠 std::string TrimPath(std::string path) { //string test3("内容"); 使用引用字符数组作 ...

  2. 错误 2 error C2059: 语法错误:“::”

    设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Vsual C++的min/max宏定义. 项目属性   ——> C/C++ ——> 预处理器 ——> 预处理器定义 ...

  3. 【DM8168学习笔记3】CodSourcery GCC Tool Chain安装过程记录

    eagle@eagle-desktop:~$ cd/home/eagle/desktop eagle@eagle-desktop:~/desktop$ cd./vboxshared eagle@eag ...

  4. boxFilter in opencv

    , -),bool normalize=true,int borderType=BORDER_DEFAULT) Smoothes image using box filter Parameters: ...

  5. Leetcode453.Minimum Moves to Equal Array Elements最小移动次数使数组元素相等

    给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动 ...

  6. PHP jpgraph的一点小提示和方法

    PHP默认是不启用GD库的,因为需要在php.ini的配置文件中将extension=php_gd2.dll注释打开.打开后你就可以画一些你想画的各种奇葩图案了.什么?不会画?那回去学基础! 今天看了 ...

  7. FTP主动模式与被动模式说明

    FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这两个端口是21(命令端口)和20(数据端口).但FTP工作方式的不同 ...

  8. 好用的Win10快捷键

    好用的Win10快捷键 Top 01 基础按键 Win+E: 打开"资源管理器". Win+R: 打开"运行"对话框. Win+L: 锁定当前用户. Win+D ...

  9. 如何在linux中部署mongodb并设置连接认证

    在windows上给mongodb设置连接认证权限:mongodb默认是不认证的,默认没有账号,现在就讲讲怎么设置账户和密码 1.首先进入C:\mongodb\bin下面双击运行mongo.exe启动 ...

  10. WebBrowser修改默认白色背景

      背景:在使用Winform的WebBrowser显示网页的时候,在网页还未加载完成之前会显示白色,刚好网页内容呈现黑色,这样视觉效果上就十分差,想把这层白色的去掉. 试了很久之后发现根本去不掉,应 ...