C参数传递
2016-05-16 14:42
162 查看
#include "stdafx.h" #include <iostream> using namespace std; //值传递 void swap1(int p,int q) { int temp; temp=p; p=q; q=temp; } //指针传递,函数体内只有指针值的变化 void swap2(int *p,int *q) { int temp; temp=*p; *p=*q; *q=temp; } //指针传递,函数体内只有指针的变化 void swap3(int *p,int *q) { int *temp; temp=p; p=q; q=temp; } //引用传递 void swap4(int &p,int &q) { int temp; temp=p; p=q; q=temp; } int main() { int a=1,b=2; swap1(a,b); //swap2(&a,&b); //swap3(&a,&b); //swap4(a,b); cout<<a<<" "<<b<<endl; return 0; }
在swap1中对p和q操作只是对临时分配的栈中内容进行操作,函数执行完后形参就消失了,对原来的a和b不产生任何影响。所以swap1不能完成交换a和b值的功能.
swap3中,形参p和q会保存在栈中,p指向a的地址,q指向b的地址,使用temp指针完成了p和q的地址交换,即p指向b的地址,q指向了a的地址,但a和b地址中的值并未发生变化,这与swap2不同,swap2中是p指向的地址中的值(就是a)与q指向的地址中的值(b)交换,所以swap2执行完后a和b的值是交换了的。
引用传递时,对形参的操作等同于对实参的操作,即传递的不会是实参的副本,而就是实参,最后会交换a和b的值。
相关文章推荐
- FragmentTabHost的使用
- 【bzoj 1610: [Usaco2008 Feb]Line连线游戏】 枚举
- linux中的文本处理方法集锦
- 知道这20个正则表达式,能让你少写1,000行代码
- Android JS交互
- 使用python读取大文件
- ant android打包--学习第一弹
- VS2010进行远程调试C++
- xutils使用手册(三)——IOC注入
- 依赖注入原理 Spring
- tcp连接及生命周期
- 如何修改android工程的包名
- ubuntu16.04安装KDE
- 设计模式(转)
- MySQL安装启动时报错一则
- Java基础知识网络编程(浏览器&服务端)
- shareSDK分享遇到的坑
- spring 的核心框架包和XML文件配置
- bzoj4590 [Shoi2015] 自动刷题机
- gateway 默认路由获取与设置