C++引用符&和指针*在函数中的使用方法和区别

明确几个问题:函数只可以返回一个参数;值传递的过程若不用一些特殊符号如static,其生存周期是在函数的局部范围内,即用完函数就消失

我们都知道在函数调用过程中存在着参数传递的问题。在值传递的过程中,我们只是简单的把数值传递给了参数,这个过程大家可以理解成数学运算中的=,若a=2,b=a,那么b的值的改变肯定是不会影响a的值,这带来了一些问题,比如我们如果想要在函数中交换a和b的值,那么a和b的值只在函数内做了局部交换,以简单的思考方式:我们将a的值给了a1,a1=a,将b的值给了b1,b1=b,在函数内操作,就是改变a1和b1的值,那么与a和b有关系吗,答案是肯定没有的,那怎么能够让a和b扯上关系呢,这里有两种方法,一种是利用&引用符,注意这个是引用符号,不是C语言里的取地址,另一种就是采用指针。


采用引用符&

关于引用符,我理解的是,MAC-10有一个名字叫MAC-10,当然我们还可以给他起一个绰号叫吹风机,那么在RUSHB的时候,我们可以叫队友给我们发一把MAC-10,当然还可以让他给我们发一把吹风机,他都会理解,这个引用符也是如此,a=2,那么我们给他取一个别名 c,让&c=a,这样我们在使用c的时候,a的值也就会跟着变化啦(注意这个操作应该在函数传递或者是定义的时候使用

#include<iostream>
int main()
{
	int a = 2;
	int& c = a;
	c = 1;
	std::cout << c<<" " << a;//结果是1 1
	//int a=2,c;
	//&c=a;这种方法是错误的,应该在c定义时就让&c=a
}

写交换函数时,

#include<iostream>
void swap(int& x, int& y)
{
	int t;
	t = x;
	x = y;
	y = t;
	return;
}
int main()
{
	int a, b;
	std::cin >> a >> b;
	std::cout << "the value " << a << "and" << b << std::endl;
	swap(a, b);
	std::cout << "the value " << a << "and" << b << std::endl;
}
//2 3
//the value 2and3
//the value 3and2

指针作为函数参数

使用指针具体来说之前我们都是直接的传入a和b的值进而来解决问题,利用指针就是“曲线救国”,把a和b的地址作为函数参数传进去,因为每个变量的地址在我们的代码里面是唯一的,因此我们可以从地址找到变量,进而改变他们的值。代码如下:


关于什么时候用&和指针或者值传递

说说我自己的理解,因为在函数传参的过程中,&方式我们可以理解为直接将它本身丢过去,并不会像值传递那样复制出来另一份,因此这种方式本身的速度更快,因为它不进行复制,可以减轻复制大型对象所产生的时间,因此在比如函数功能是遍历一个数组时用&方式或者指针(当数组作为函数参数时 ,考虑到内存占用过多问题,函数只会拷贝一个数组的指针,而不是全部都复制下来)更好;同时如果函数内我们希望对传入的对象进行数据上的操作,并能够直接辐射到主函数中,使用指针和&方法更好。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值