为什么说所有参数传递都是值传递

首先要知道指针作为一种变量类型,和所有变量类型一样,它自己占用一块内存空间,并且可以存放一个值(这个值往往是一个地址)
例子:

*p=0XX001
//0XX001只是p这个变量存放的值,p指针自己也有一个内存空间0XX101

**为什么我说函数都是值传递?**直接上代码

#include <stdio.h>
void swap(int *Pa,int *Pb){
	//
	int *Pswapper;
	//在这里我们交换一下指针Pa和Pb的值
	Pswapper=Pa;
	Pa=Pb;
	Pb=Pswapper;
	printf("输出结果a=%d,b=%d",*Pa,*Pb);
	//输出结果为*Pa=444,*Pb=222
}

int main()
{
   	int a=222;
	int b=444;
	int *Pa=&a;
	int *Pb=&b;
	swap(Pa,Pb);
   	printf("输出结果a=%d,b=%d",*Pa,*Pb);
   	//输出结果为*Pa=222,*Pb=444,没有改变
   	return 0;
}

输出结果a=222,b=444
可以看到,我让指针Pa,Pb作为swap函数参数,将Pa和Pb的值进行交换,出了函数后,结果没发生任何改变。

可见指针作为参数只是值传递而已。
然后有人说,那引用类型呢?

#include<iostream>
using namespace std;
void swip(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a = 222, b = 444;
	swip(a, b);
	cout << "a = " << a << "b = " << b <<endl;
	return 0;
	//输出结果:a=444,b=222,发生了交换
}

乍一看,完成了所谓的引用传递,可什么是引用呢?

https://blog.csdn.net/cherisegege/article/details/80470000?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-80470000-blog-88676471.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3#commentBox

引用的低层原理就是做了如下限制的指针:
1.必须初始化且只能赋值一次
2.无法访问引用的地址,默认访问所赋值变量的地址

总之,观察一下这三种参数传递的定义和调用
int a=xxx;
int b=xxx;
void swap(int parameter_a,int parameter_b) => swap(a,b)
void swap(int *parameter_a,int *parameter_b) => swap(&a,&b)
void swap(int &parameter_a,int &parameter_b) => swap(a,b)
其实就是
int parameter_a=a
int *parameter_a=&a
int &parameter_a=a
所以何必区分引用传递和参数传递

不管什么传递,实质都只是在中间加了个"="。
而“=”是赋值操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值