• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++形参与实参的区别实例解析

C++形参与实参的区别实例解析

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++打印杨辉三角形,杨辉三角形c++,c++计算三角形面积,c++三角形,c++输出杨辉三角形等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文以实例阐述了C++中形参与实参的区别,有助于读者加深对于C++形参与实参的认识。

形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。

1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。

2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。

3.实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。

4.函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

参考如下示例:

void Exchg1(int x, int y) 
{
 int tmp;
 tmp=x;
 x=y;
 y=tmp;
 printf("Exchg1:x=%d,y=%d\n",x,y);
}
void Exchg2(int &x, int &y) 
{
 int tmp;
 tmp=x;
 x=y;
 y=tmp;
 printf("Exchg2:x=%d,y=%d\n",x,y);
}
void Exchg3(int *x, int *y) 
{
 int tmp;
 tmp=*x;
 *x=*y;
 *y=tmp;
 printf("Exchg3:x=%d,y=%d\n",*x,*y);
}

void main()
{
 int a=4,b=6;
 Exchg1 (a,b) ;
 printf("a=%d,b=%d\n",a,b);
 Exchg2 (a,b);
 printf("a=%d,b=%d\n",a,b);
 Exchg3(&a,&b) ;
 printf("a=%d,b=%d\n",a,b);
}

</div>

这里Exchg1函数被调用的时候,并没有成功交换a跟b的数据。为何呢。
int a=4,b=6;
Exchg1 (a,b) ;   //这里本质上发生的是:Exchg1 (intx=a,int y=b) ;   x跟y是函数定义里面的形参,也就是说这里只是把实参a跟b的值赋予了x,y这2个形参变量。接下来,函数里发生的值互换只换掉了x跟y的值,而实参a跟b没有影响。
再看Exchg2 (a,b);   //再看本质Exchg2 (int &x=a,int &y=b);   这里x跟y都是a,b的引用,操作x跟y交换就等于a跟b交换,自然,调用Exchg2 可以成功交换a跟b
Exchg3(&a,&b) ;   //Exchg3(int *x=&a,int *y=&b);   x跟y2个形参是a跟b的指针,也就是实参数据存放的地址。然后函数里交换了x跟y指向的数据,也就是实参a跟b,所以,交换也是成功的。

代码运行的结果,exchg1没有交换a,b值;exchg2交换了a,b值,到了exchg,a,b的值似乎没有交换,仍旧是a为4,b为6,刚开始以为代码有问题,后来设置了断点之后,发现代码运行到exchg3(&a,&b)时,a=6,b=4了,所以代码运行结果和初始值一样的话,说明已经交换了a,b的值,至此说明代码是没有任何问题的。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++形参与实参的区别实例解析
  • C++输出上三角/下三角/菱形/杨辉三角形(实现代码)

相关文章

  • 2017-05-28C/C++实现的游戏角色名称名字随机生成代码
  • 2017-05-28C++/Php/Python/Shell 程序按行读取文件或者控制台的实现
  • 2017-05-28用C语言求幂函数和指数函数的方法
  • 2017-05-28深度理解c++中的this指针
  • 2017-05-28贪心算法 WOODEN STICKS 实例代码
  • 2017-05-28C++中自定义sleep、条件变量sleep实例
  • 2017-05-28老生常谈C++中实参形参的传递问题
  • 2017-05-28浅谈C++ 基类指针和子类指针的相互赋值
  • 2017-05-28一个string类的简单实现案例
  • 2017-05-28C++指向函数的指针用法详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c语言打印输出双引号的方法示例
    • 引用numpy出错详解及解决方法
    • C++实现矩阵原地转置算法
    • C++如何实现广义表详解
    • 深入理解二叉树的非递归遍历
    • C++中memset函数用法详解
    • VisualStudio 使用Visual Leak Detector检查内存泄漏
    • c语言的cps实现求fibonacci数列示例
    • 解析C++浮点数无效值的定义与无效值判定的小结
    • 浅谈Linux环境下并发编程中C语言fork()函数的使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有