7.1——函数的定义,参数传递,return语句
函数的定义:
(1)函数体是一个作用域,函数体是一个语句块,定义了函数的具体操作
(2)函数的形参类似于局部变量,只是区别是它是在函数的形参列表中定义的。
(3)C++是一种静态强类型语言,对于每一次函数调用,编译时都会检查其实参的类型,必须是与形参相同或者可以转化
参数的传递:
(1)当参数为非引用时,调用时形参复制实参的值
(2)当参数为引用时,调用时形参是实参的别名。
非引用形参:
(3)当形参为const的非引用时,调用时可以传递const实参也可以是非const的实参,只是在函数中不能改变这个局部变量的值
其实为了与C相兼容,这个类型还是被认为是非const了
(4)复制实参的局限性:特别在复制对象时付出时间和空间代价太大。
引用行参:
(5)使用引用形参,函数可以直接访问对象而无需复制,然后使用const引用可以避免修改实参
(6)若是函数具有非const的引用形参,则不能用const的对象来调用(因为const对象时不能修改的),而函数是可以修改传递
进来的对象的。
(7)应该将不修改相应实参的形参定义为const引用,这样const对象也可以调用它了,不然会大大的限制函数的使用(因为非const
引用的形参的函数只能与非const的对象关联在一起)
(8)传递指向指针的引用:void func(int *&v1) 这里从右向左看,v1是一个引用,是一个指向int型对象的指针的引用。即这个
指针的一个别名。当在函数里面改变这个指针变量时,实参的指针变量也会改变。
vector形参:
(9)vector与数组有所不同,一般不应该使用vector的非引用形参,因为这样会复制vector的每一个元素。应该将其采用引用的类型
(10)一般更倾向于采用迭代器来传递指向容器中将要处理的元素。
数组形参:
(11)使用数组名时,数组名会自动转化为指向其第一个元素的指针。
(12)不能复制数组(即在函数调用的时候就算是以数组名作为参数时,会转化为指针)
(13)虽然不能直接传递数组,但是函数的形参可以写成数组的形式:void func(int*) void func(int[])
void func(int[10])其实这个指定的长度是没啥用的。这三种都是等价于int*指针形参的
数组形参的引用和非引用:
(14)当数组作为形参非引用时,会自动转化为指针,指向数组的第一个元素。形参复制的是这个指针的值,可以通过指针
来对数组元素进行操作。
(15)void func(int(&ary)[10])当将数组作为引用的形参时,编译器不会将数组实参转化为指针,而是传递的数组
引用的本身。这时编译器会检查实参数组长度与形参是否匹配。
多维数组:
(16)编译器会忽略第一维的长度 void func(ary【】【10】)。这里其实形参是一个指针,指向一个包含十个对象的数组
的指针。
man处理命令行选项:
return语句:
(1)当返回引用时,不是返回复制的值,而是返回的对象的引用(即本身),所以千万不要返回局部变量的引用。
(2)不要返回局部对象的指针,因为当函数结束时,局部对象的内存被释放了,返回的指针就变成了一个空悬指针。
7.1——函数的定义,参数传递,return语句的更多相关文章
- Python函数基础--def及return语句地操作
1·def是可执行的代码 Python的函数是有一个新的语句编写的,即def.不像C这样的编译语言,def 实际上是一个可执行的语句--函数并不存在,直到Python运行了def后才存在.在典型的操作 ...
- 函数----基础,参数传递,返回类型和return语句
一.函数基础1.形参和实参 实参是形参的初始值.第一个实参初始化第一个形参,第二个实参初始化第二个形参,以此类推.尽管实参与形参存在对应关系,但是并没有规定实参的求值顺序.编译器能以任意可行的顺序对实 ...
- Python快速入门学习笔记(三)——函数的定义与调用
定义函数 Python中定义函数的格式为: def fun([参数列表]): ... 函数在执行到return语句时结束,并将结果返回.如果没有return语句,函数执行完毕后返回None. 例: d ...
- 返回类型和return语句
return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方.return语句有两种形式: return; return expression; 无返回值函数 没有返回值的return语句只 ...
- 关于main函数的定义
很多人甚至市面上的一些书籍,都使用了void main( ),其实这是错误的.C/C++中从来没有定义过void main( ).C++之父Bjarne Stroustrup在他的主页上的FAQ中明 ...
- A Byte of Python 笔记(5)函数:定义、形参、局部变量、默认参数、关键参数
第7章 函数 函数是重要的程序段.它们允许你给一块语句一个名称,然后你可以在程序的任何地方使用这个名称任意多次地运行这个语句块.这被称为 调用 函数. 定义函数 函数通过 def 关键字定义.def ...
- 在函数体的“出口处”,对 return 语句的正确性和效率进行检查
在函数体的“出口处”,对 return 语句的正确性和效率进行检查. 如果函数有返回值,那么函数的“出口处”是 return 语句. 我们不要轻视 return 语 句.如果 return 语句写得不 ...
- 返回类型和 return 语句
return 语句终止当前正在执行的函数并将控制权返回到调用该函数的地方.return 语句有两种形式: return; return expression; 不要返回局部对象的引用或指针: 函数完成 ...
- python函数,定义,参数,返回值
python中可以将某些具备一定功能的代码写成一个函数,通过函数可以在一定程度上减少代码的冗余,节约书写代码的时间.因为有一些代码实现的功能我们可能会在很多地方用到. 1.函数的声明与定义 通过def ...
- php学习笔记-return语句
一个函数中可以有return语句,也可以没有.什么时候需要呢?就是当你想接收函数的执行结果的时候,你需要一个return 语句. 函数执行完return语句之后,return语句后面的代码是永远不会得 ...
随机推荐
- CF962D Merge Equals
思路: 不必每次都找最小的值进行合并,从前往后扫一遍的过程中能合并就一直合并. 实现: #include <bits/stdc++.h> using namespace std; type ...
- [BZOJ1968][AHOI2005]COMMON约数研究 数学
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1968 直接计算每个因子的贡献就可以了. $Ans=\sum_{i=1}^n[\frac{n ...
- iOS 解决iOS 9下的http请求发送失败问题
iOS9中 因为系统要求所有的请求都必须使用https, 所以发送http请求会失败,如果想让程序能够兼容http请求 在info.plist中添加以下代码: 这里需要做的是右键info.plist文 ...
- Mac OSX简单使用中会用到的
选择操作系统(例如选择BootCamp分区的Windows):开机按住Option键直到磁盘图标出现后选择. 忘记本地账号密码:按着Command+R开机选择Recovered启动打开终端输入re ...
- 洛谷 P1832 A+B Problem(再升级)
题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛滥趋势 ·以上纯属个人吐槽 ·给定一个正整数n ...
- python3.7 socket通信
def OpenClient(self,e): global line line = socket.socket(socket.AF_INET,socket.SOCK_STREAM) line.bin ...
- react中的jsx详细理解
这是官网上的一个简单的例子 const name = 'Josh Perez'; const element = <h1>Hello, {name}</h1>; ReactDO ...
- iview table 勾选当前行代码 data key _checked: true
给 data 项设置特殊 key _checked: true 可以默认选中当前项
- vue之组件的使用(转载)
在工程目录/src下的component文件夹下创建一个 firstcomponent.vue并写仿照 App.vue 的格式和前面学到的知识写一个组件. <template> <d ...
- 剑指Offer(Python)
014-链表中倒数第k个结点 用快慢指针:p2比p1先走到k:间隔了k-1)步,然后再一起走,当p2为最后一个时,p1就为倒数第k个数 class ListNode: def __init__(sel ...