C++形参与实参的区别实例解析
本文以实例阐述了C++中形参与实参的区别,有助于读者加深对于C++形参与实参的认识。
1.
2.
3.
4.
参考如下示例:
voidExchg1(intx,inty) { inttmp; tmp=x; x=y; y=tmp; printf("Exchg1:x=%d,y=%d\n",x,y); } voidExchg2(int&x,int&y) { inttmp; tmp=x; x=y; y=tmp; printf("Exchg2:x=%d,y=%d\n",x,y); } voidExchg3(int*x,int*y) { inttmp; tmp=*x; *x=*y; *y=tmp; printf("Exchg3:x=%d,y=%d\n",*x,*y); } voidmain() { inta=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); }
这里Exchg1函数被调用的时候,并没有成功交换a跟b的数据。为何呢。
inta=4,b=6;
Exchg1(a,b); //这里本质上发生的是:Exchg1(intx=a,inty=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的值,至此说明代码是没有任何问题的。
相关文章
- C++学习——c++逗号操作符说明(附加全部运算符优先级)
- EasyC++41,模板显式具体化
- 老梁聊C++,为什么不能修改set里的值?如果非要修改怎么办?
- C++继承
- C++ Socket编程实例解析[通俗易懂]
- c语言createthread函数,C++中CreateThread函数创建线程的用法和实例
- C++ Primer Plus习题答案-第三章
- [StackOverflow] C++ gRPC 异步 API 实例与优势
- C++stl库_c++库
- C/C++ Inline Hook 钩子编写技巧
- c 线程安全的单例模式-设计模式之单例模式(C++版)
- 基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型
- C/C++中对链表操作的理解&&实例分析详解编程语言
- C++基类和派生类赋值(初始化)规则
- C++ list,STL list(双向链表)详解
- C++实现:螺旋矩阵的实例代码
- C++十进制转换为二进制的实例代码
- C++内核对象封装单实例启动程序的类
- C++之CNoTrackObject类和newdelete操作符的重载实例
- C++写注册表项实例
- C++针对bmp格式解析实例
- C++基于对话框的程序的框架实例
- C++计算ICMP头的校验和实例
- 把Lua函数传递到C/C++中实例
- C++explicit构造函数实例解析
- C++日志记录类实例解析
- VC++操作SQLite简单实例
- C++结构体用法实例分析
- VC++中HTControl的CHTButton按钮控件类用法实例解析
- VC++角色游戏中的人物初始化模块代码实例
- C++中vector的用法实例解析