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

来源:互联网 发布:买淘宝店铺号去哪里买 编辑:程序博客网 时间:2024/05/28 17:08
值传递,指针传递,引用传递 的区别


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


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


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

实际上是一个对象


#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 transfercout << "值传递\n";ValueTransfer(x, y);cout << "实参x与y地址为\n";cout << &x << ' ' << &y << endl;cout << "传递后实参的值为:\n";cout << x << y << endl << endl;//PointerTransfercout << "指针传递\n";PointerTransfer(&x, &y);cout << "实参x与y地址为\n";cout << &x << ' ' << &y << endl;cout << "传递后实参的值为:\n";cout << x << y << endl << endl;//QuoteTransfercout << "引用传递\n";QuoteTransfer(x, y);cout << "实参x与y地址为\n";cout << &x << ' ' << &y << endl;cout << "传递后实参的值为:\n";cout << x << y << endl << endl;return 0;}

结果:


0 0
原创粉丝点击