交换函数及void用法 和所谓的 “当我们做值传递的时候,形参发生改变,并不会影响实参”

了解了一下交换函数,知道了函数不需要返回值的时候,函数声明的时候可以写void;

#include<iostream>
using namespace std;
 void swap(int num1,int num2)
 {
         cout<<"交换前:"<<endl;
        cout<<"num1="<<num1<<endl;
        cout<<"num2="<<num2<<endl;
         
         int temp=num1;
        num1=num2;
           num2=temp;

        cout<<"交换后;"<<endl;
        cout<<"num1="<<num1<<endl;
        cout<<"num2="<<num2<<endl;
     
         return;

 }
 int main(){
     int a=20;
     int b=10;
 
    swap(a,b);
     
 }

 看似是发生交换了,实际上如何?!确实会 输出这样的结果;

 但是! 如果我们直接输出前后交换的 实际参数 那结果呢?  结果就会大吃一惊,你会发现它并没有交换!

#include<iostream>
using namespace std;
 void swap(int num1,int num2)
 {
 		cout<<"形参交换前:"<<endl;
	    cout<<"num1="<<num1<<endl;
	    cout<<"num2="<<num2<<endl;
	 	
		 int temp=num1;
    	num1=num2;
       	num2=temp;

	    cout<<"形参交换后;"<<endl;
	    cout<<"num1="<<num1<<endl;
	    cout<<"num2="<<num2<<endl;
	    cout<<" "<<endl;
	 
 	    return;

 }
 int main(){
 	int a=20;
 	int b=10;
 	cout<<"实参" <<endl; 
	 cout<<"a="<<a<<endl;
	 cout<<"b="<<b<<endl; 
	 cout<<" "<<endl; 
 
    swap(a,b);
	 cout<<"实参交换"<<endl;
	 cout<<"a="<<a<<endl;
	 cout<<"b="<<b<<endl; 
 }

运行结果为:

所以 我理解了“当我们做值传递的时候,形参发生改变,并不会影响实参!”这句话的真正意义!

到底是为什么呢 

是因为 这个值传递呢 它是 在 实际参数a,b 存在的情况下,又重新开辟了新的内存空间,也就是形参 num1 ,num2    ,进行了值传递 也就是 把a 的值复制给了 num1 ,把b的值复制给了num2 ,        a,b本身不发生任何变化,然后接下来的操作

   创建了一个临时变量temp来储存num1的值,然后进行num2赋值给num1,temp又赋值给num2,最后输出交换后的num1和num2

这些操作就是完全对形参 也就是num1 和num2 做的操作了,与a和b无关,所以如果直接进行对a和b的前后输出的话,你会发现完全没变!

那为什么我们第一次输出的时候,会得到交换的数据呢  

那是因为 我们实际上输出的交换数据并不是 主函数中实现的 真正的交换后的a和b,而是主函数中调用了 我们自己定义的swap函数,输出的东西也是swap中的交换后的形参,造成了类似的一种假象。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值