C语言中参数传递

C语言中参数传递

ID:38165793

大小:18.84 KB

页数:4页

时间:2019-06-03

C语言中参数传递_第1页
C语言中参数传递_第2页
C语言中参数传递_第3页
C语言中参数传递_第4页
资源描述:

《C语言中参数传递》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、二. 参数传递  函数的形参的初始化和变量的初始化一样,如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则它是实参的别名。1. 非引用实参  普通的非引用类型的函数通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数并没有调用所传递的实参本身,因此不会修改实参的值。  注解:非引用形参表示对应实参的局部副本,对这类行参的修改仅仅改变了局部副本的值,一旦函数执行结束,这些局部变量的值也就没有了。a. 指针形参  指针形参与其他非引用类型的行参一样,如果将新指针赋给行参,主调函数使用的实参指针的值没有改变。事实上被复制的指

2、针只影响对指针的赋值。指针形参是const类型还是非const类型,将影响函数调用所使用的实参。b. const行参  在调用函数时,如果该函数使用非引用的非const形参,则既给该函数传递const实参也可传递非const的实参(因为改变形参不影响const的实参,所以const实参不会被改变)。如果将形参定义为非引用的const类型,则在函数中,不可以改变实参的局部副本,由于实参是以副本的形式传递,因此传递给函数形参既可是const也可是非const对象。  注意:尽管函数的形参是const,但是编译器却将该行参声明视为普通的int型

3、。  voidfcn(constinti);  voidfcn(inti);  为了兼顾C语言,认为这两种定义并不区别。c. 复制实参的局限性  不适合复制实参的情况包括:  当需要在函数中修改实参的值时  当需要以大型对象作为实参传递时,对实际的应用而言,复制对象所付出的时间和存储空间代价往往很大。  但没有办法实习对象的复制时  对于以上几种情况,有效的办法是将形参定义为引用或指针。2. 引用实参  与所有引用一样,引用形参直接关联到其所绑定的对象,而并非这些对象的副本。定义引用时,必须用与该引用绑定的对象初始化该引用。引用形参以完全

4、相同的方式工作。每次调用函数时,引用形参被创建并与相应的实参关联。a. 使用引用形参返回额外的信息  函数只能返回单个值,但有时候函数有不止一个的内容需要返回。这时候我们可以通过函数传递一个额外的引用实参,用于返回额外的信息。b. 利用const引用避免复制  对于大型对象复制效率太低了,有些类型甚至无法复制,利用const引用就可以避免复制,引用形参是引用,所以不复制实参,又因为形参是const引用,所以不能使该引用来修改实参。c. 更灵活的指向const的引用  如果函数具有普通的非const引用形参,则不能通过const对象进行调用

5、,因为函数可以修改传来的参数,但这样就违背了实参的const特性。  intincr(int&val)  {     return ++val;  }  intmain()  {     shortv1=0;     constintv2=42;     intv3=incr(v1); //error, v1不是整型     v3=incr(v2); //error,v2使const对象     v3=incr(0); //error,字面值不是左值     v3=incr(v1+v2); //error,加法不能作为左值     int

6、v4=incr(v3); //ok,v3是一个非const的整型值  }  问题的关键是非const引用形参只能与完全相同的非const对象关联。  最佳实践:应该将不需要修改的引用定义为const引用。普通的非const引用形参在使用时不太灵活。这样的形参既不能被const对象初始化,也不能用字面值或产生右值的表达式初始化。d. 传递指向指针的引用  实现两个指针的交换:  voidptrswap(int*&v1,int*&v2)  {     int*temp=v2;     v2=v1;     v1=temp;  }  行参int

7、*&val的定义从右向左理解:v1是一个引用,与指向int型对象的指针相关联。也就是说,v1只是传递进ptrswap函数的任意指针的别名。3. vector和其他容器类型的行参  最佳实践:通常,函数不应该有vector或其他标准容器库类型的实参。调用含有普通的非引用vector行参的函数将会复制vector的每一个元素。从避免复制vector的角度出发,应考虑将形参声明为引用类型。4. 数组形参a. 数组形参的定义  数组会被自动转换为指针,通常,将数组形参直接定义为指针要比数组语法更好,这样就明确的表示,函数操纵是指向数组元素的指针,

8、而不是数组本身。  当编译器检查数组形参关联的实参时,他只会检查实参是不是指针,指针的类型和数组元素的类型是否匹配,而不会检查数组的长度。b. 数组实参  和其他类型一样,数组形参可定义为引用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。