您的位置:首页 > 其它

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的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: