值传递,指针传递,引用传递 的区别

值传递,指针传递,引用传递 的区别


值传递:
从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出
形参为实参的拷贝,形参有单独的内存空间,当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递


指针传递:
指针传递向形参传递的为实参的地址,即形参为一个指向实参地址的指针,形参的值为实参的地址,而形参所在的地址并不是实参的地址
对形参指向内容的修改即改变了实参的值


引用传递:
引用传递与指针传递不同是:引用传递中形参与实参的地址和参数值都是相同的,形参与实参只是名字不一样(形参相当于实参的别名)

实际上是一个对象


#include "stdafx.h"
#include<iostream>
using namespace std;

void ValueTransfer(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
	cout << a << b << endl;

	cout << "形参a与b的地址为\n";
	cout << &a << ' ' << &b << endl;
}

void PointerTransfer(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
	cout << *a << *b << endl;

	cout << "形参a与b的地址为\n";
	cout << &a << ' ' << &b << endl;
}

void QuoteTransfer(int &a, int&b)
{
	int temp = a;
	a = b;
	b = temp;
	cout << a << b << endl;

	cout << "形参a与b的地址为\n";
	cout << &a << ' ' << &b << endl;
}
int main()
{
	
	int x = 3;
	int y = 4;
	//value transfer
	cout << "值传递\n";
	ValueTransfer(x, y);
	cout << "实参x与y地址为\n";
	cout << &x << ' ' << &y << endl;
	cout << "传递后实参的值为:\n";
	cout << x << y << endl << endl;
	
	//PointerTransfer
	cout << "指针传递\n";
	PointerTransfer(&x, &y);
	cout << "实参x与y地址为\n";
	cout << &x << ' ' << &y << endl;
	cout << "传递后实参的值为:\n";
	cout << x << y << endl << endl;

	//QuoteTransfer
	cout << "引用传递\n";
	QuoteTransfer(x, y);
	cout << "实参x与y地址为\n";
	cout << &x << ' ' << &y << endl;
	cout << "传递后实参的值为:\n";
	cout << x << y << endl << endl;

	return 0;
}

结果:


猜你喜欢

转载自blog.csdn.net/u012824097/article/details/55252324