1.传值参数

//传值参数
int Abc(int a,int b,int c)
{
return a+b+b*c+(a+b-c)/(a+b)+;
}

a,b和c是函数Abc 的形式参数formal parameter,类型均为整型。如果在如下语句中调用函数A b c:

z = Abc(,x,y)

那么,2,x 和y 分别是对应于a,b 和c 的实际参数(actual parameter)。

当A bc ( 2 ,x ,y) 被执行时,a 被赋值为2;b 被赋值为x;c 被赋值为y。如果x 和 / 或y 不是int 类型,那么在把它们的值赋给b 和c 之前,将首先对它们进行类型转换。在上面程序中,形式参数a,b 和c 都是传值参数(value parameter)。

运行时,与传值形式参数相对应的实际参数的值将在函数执行之前被复制给形式参数,复制过程是由该形式参数所属数据类型的复制构造函数(copy constructor)完成的。如果实际参数与形式参数的数据类型不同,必须进行类型转换,从实际参数的类型转换为形式参数的类型,当然,假定这样的类型转换是允许的。
当函数运行结束时,形式参数所属数据类型的析构函数(destructor)负责释放该形式参数。当一个函数返回时,形式参数的值不会被复制到对应的实际参数中。因此,函数调用不会修改实际参数的值。

2.模板函数

//模板函数
template<class T>
T Abc(T a, T b, T c)
{
return a+b+b*c+(a+b-c)/(a+b)+;
}

利用这段通用代码,通过把T替换为int,编译器可以立即构造出程序计算整形,把T 替换为float又可以立即构造出程序处理浮点型。事实上,通过把 T替换为double或long,编译器又可以构造出函数Abc的双精度型版本和长整型版本。把函数 Abc 编写成模板函数可以让我们不必了解形式参数的数据类型。

3.引用参数

形式参数的用法会增加程序的运行开销。

考察一下函数被调用以及返回时所涉及的操作。假定 a,b 和c 是传值参数,在函数被调用时,类型 T 的复制构造函数把相应的实际参数分别复制到形式参数 a,b 和c 之中,以供函数使用;而在函数返回时,类型T的析构函数会被唤醒,以便释放形式参数 a,b 和c。

//引用参数
template<class T>
T Abc(T& a, T& b, T& c)
{
return a+b+b*c+(a+b-c)/(a+b)+;
}

在上面程序所示的代码中, a ,b 和c 是引用参数( reference parameter ) 。如果用语句Abc (x, y, z ) 来调用函数Abc,其中x、y 和z 是相同的数据类型,那么这些实际参数将被分别赋予名称a,b 和c,因此,在函数Abc 执行期间,x、y 和z 被用来替换对应的a,b 和c。与传值参数的情况不同,在函数被调用时,本程序并没有复制实际参数的值,在函数返回时也没有调用析构函数。因此我们可以节省采用传值参数进行参数复制时所需要的操作。

4.常量引用参数

这种模式指出函数不得修改引用参数。

//常量引用参数
template<class T>
T Abc(const T& a, const T& b, const T& c)
{
return a+b+b*c+(a+b-c)/(a+b)+;
}

使用关键字const 来指明函数不可以修改引用参数的值,这在软件工程方面具有重要的意义。这将立即告诉用户该函数并不会修改实际参数。

c++基础学习之函数与参数的更多相关文章

  1. [C/C++基础知识] main函数的参数argc和argv

    该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.一.main()函数参数通常我们在写主函数时都是void ...

  2. Node.js系列基础学习-----回调函数,异步

    Node.js基础学习 Node.js回调函数 Node.js异步编程的直接体现就是回调,异步编程依托回调来实现,但不是异步.回调函数在完成任务后就会被调用,Node有很多的回调函数,其所有的API都 ...

  3. python学习Day11 函数的参数列表

    复习 什么是函数? 具体特定功能的代码块 - 特定功能代码作为一个整体,并给该整体命名,就是函数 函数的优点 : 1.减少代码的冗余,2.结构清晰,可读性强 3.具有复用性,开发效率高,维护成本高 如 ...

  4. python基础学习Day11 函数名的应用、闭包、迭代器

    一.函数名的应用 1.函数名就是函数的内存地址 def func(): print(666) func() print(func) #函数的内存地址 2.函数名可以作为变量 def func1(): ...

  5. python 基础 4.1 函数的参数

    #/usr/bin/python #coding=utf-8 #@Time   :2017/10/24 9:09 #@Auther :liuzhenchuan #@File   :函数的参数.py # ...

  6. C/C++基础:main函数的参数argc和argv

    转载: https://blog.csdn.net/Eastmount/article/details/20413773 一.main()函数参数 通常我们在写主函数时都是void main()或in ...

  7. python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal

    一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args   **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...

  8. python基础学习2 函数变量与赋值

    学习的第一步,就是通常的输出函数:print() 1.基础主要学习了变量的赋值,变量名可以疑字母.数字.下划线(_)进行命名,但是不能以数字开头 变量的赋值:变量名 = 变量值 2.模块的导入,和调用 ...

  9. PHP基础学习(函数一)

    PHP(Hypertext Preprocessor):超文本预处理器,一种嵌入在HTML中并且运行在服务器端的脚本语言. var_dump--打印变量相关信息 说明:  <?php var_d ...

随机推荐

  1. BZOJ5343 [Ctsc2018]混合果汁 【二分 + 主席树】

    题目链接 BZOJ5343 题解 明显要二分一下美味度,然后用尽量少的价格去购买饮料,看看能否买到\(L\)升,然后看看能否控制价格在\(g\)内 尽量少的价格,就优先先选完便宜的饮料,由于询问的是一 ...

  2. 解决“并非来自 Chrome 网上应用店。”

    Chrome谷歌浏览器已停用不支持的扩展程序解决方法 第一种方法:(亲测有效) 1.首先把需要安装的第三方插件,后缀.crx 改成 .rar,然后解压,得到一个文件夹 2.再打开chrome://ex ...

  3. Python爬虫学习笔记之爬取新浪微博

    import requests from urllib.parse import urlencode from pyquery import PyQuery as pq from pymongo im ...

  4. 浏览器 连不上网 (3):DNS 服务器问题

    解决:设置一下DNS服务器的地址 步骤: 打开网络和共享中心(网络和 Internet设置)-> 更改适配器 -> 双击我们连接的 无线网(WiFi式) 或 以太网(网线式): 从出现的窗 ...

  5. [05] css优先级

    1.优先级计算规则(特殊性) 在css中,有不同的方式编写css,如果想给同一个标签设置样式,选择器的写法有很多种,那么当多个样式都应用于同一个标签,标签优先选择哪个样式呢?按照以下规则: 现有 0, ...

  6. Nginx反向代理丢失cookie的问题

    今天在测试环境进行测试时发现有个页面无论如何都进不去了,经过调试发现,JSESSIONID的path和我访问应用的工程不相同!我访问的应用是/xxx/,而JSESSIONID的path是/yyy/,这 ...

  7. 【BZOJ2049】【SDOI2008】洞穴勘测 [LCT]

    洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 辉辉热衷于洞穴勘测.某天,他按照地 ...

  8. 也说JS脚本加载控制

    问题背景 前端采用的 iframe + html 做后台管理系统.现在js.jquery插件非常多,每次页面都是引用就类似这样: <script src="../Scripts/jqu ...

  9. 【Sqlite3】SQLITE3使用总结(转)

    原文转自 https://www.cnblogs.com/wenxp2006/archive/2012/06/04/2535169.html SQL语句操作 介绍如何用sqlite 执行标准 sql  ...

  10. C++11 自动释放锁(转)

    原文转自 https://blog.csdn.net/lmb1612977696/article/details/77712170 c++11加入了很多新的特性,值得我们去探索. 先看一个例子:普通的 ...