传值 传引用 传指针

指针:指针就是一个变量,如果非要说是一个特殊的变量也不为过,因为指针的初始化和解引用等不同的操作方式而已。就内存的分布来说,指针和一个变量在内存中存放是没有任何区别的,无非指针存放的是变量的地址。

传值:传值无非就是实参拷贝传递给形参,单向传递(实参->形参),赋值完毕后实参就和形参没有任何联系,对形参的修改就不会影响到实参。

传地址:为什么说传地址也是一种传值呢?因为传地址是把实参地址的拷贝传递给形参。还是一句话,传地址就是把实参的地址复制给形参。复制完毕后实参的地址和形参的地址没有任何联系,对实参形参地址的修改不会影响到实参, 但是对形参地址所指向对象的修改却直接反应在实参中,因为形参指向的对象就是形参的对象。


传引用:传引用本质没有任何实参的拷贝,一句话,就是让另外一个变量也执行该实参。就是两个变量指向同一个对象。这是对形参的修改,必然反映到实参上。

#include<iostream>
using namespace std;

void Value(int m)  //传值,不太好,改变的是形参的值,不是实参的值,非要这样的话要return出这个值
{
	cout << "Value(int m)" << endl;
	cout << "{" << endl;
	cout << "   &m=" << &m << endl;
	cout << "}" << endl;
	m++;
}
                         //引用“从一而终”  ,引用不能为空
void Reference(int &n)   //传引用,引用即别名,即被调函数中形参对主调函数实参进行操作(值,地址都和实参一致)
{                                      
	cout << "Reference(int &n)" << endl;
	cout << "{" << endl;
	cout << "   n=" << n << "  &n=" << &n << endl;
	cout << "}" << endl;
	n++;
}
                        //指针可以“见异思迁” ,指针可以为空
void Pointer(int *n)   //传指针,指针即地址,本质上传的是一个地址值,值传递特点:被调函数对形参的任何操作都是作为局部变量进行的,不会影响到主调函数的实参的值
{                      //值传递是单向传递(实参->形参),赋值完后,形参和实参没半毛钱关系
	               //形参是可被修改的,如下面的n= &b;将指针n指向了b,(*n)++不会再修改“实参”n的值,这也是为什么传指针时需要加const的原因
	cout << "Pointer(int *n)" << endl;
	cout << "{" << endl;
	cout << "   n=" << n << "  &n=" << &n << endl;
	(*n)++;

	int b = 20;
	cout << "   b=" << b << "  &b=" <<&b<< endl;

	n = &b;
	cout << "   n=" << n << "  &n=" << &n << endl;
	cout << "   n=" << *n << endl;
	(*n)++;
	cout << "   n=" << *n << endl;
	cout << "}" << endl;
}


int main()
{
	int n = 10;
	cout << "n = " << 10 << "  &n=" << &n << endl << endl;
	cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;

	Value(n);
	cout << "after Value() n=" << n << endl << endl;
	cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
	Reference(n);
	cout << "after Reference() n=" << n << endl << endl;
	cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
	Pointer(&n);
	cout << "after Pointer() n=" << n << endl << endl;
	cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
	system("pause");
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值