Skip to main content
 首页 » 编程设计

C++使用指针交换两个变量的值

2022年08月15日149txw1958

1.值传递

#include <iostream> 
using namespace std; 
 
//从控制台输入2个整数,使用自定义函数交换两个变量的值  
 
void swap(int x,int y) 
{ 
    int temp; 
    temp=x; 
    x=y; 
    y=temp; 
} 
int main() 
{ 
   int a,b;  
   cout<<"请输入2个整数:"<<endl; 
   cin>>a>>b;     
   cout<<"交换前"<<"a="<<a<<" "<<"""b="<<b<<endl;     
   swap(a,b);//调用交换函数     
   cout<<"交换后"<<"a="<<a<<" "<<"""b="<<b<<endl;     
     
    return 0; 
 } 

运行结果:实参传递数据给形参是单向传递的方式,形参值的改变无法传回来给实参。所以无法交换原来实参的值。

 2.修改形参指针的值

#include <iostream> 
using namespace std; 
 
//从控制台输入2个整数,使用自定义函数交换两个变量的值  
 
void swap(int *p,int *q) 
{ 
    int *temp; 
    temp=p; 
    p=q; 
    q=temp; 
} 
 
int main() 
{ 
   int a,b;  
   cout<<"请输入2个整数:"<<endl; 
   cin>>a>>b;     
     
    int *p,*q; 
    p=&a; 
    q=&b;  
 
    cout<<"交换前"<<"*p="<<*p<<" "<<"*q="<<*q<<endl; 
    swap(p,q);  
    cout<<"交换后"<<"*p="<<*p<<" "<<"*q="<<*q<<endl; 
    cout<<"交换后"<<"a="<<a<<" "<<"""b="<<b<<endl; 
     
    cout<<"交换前"<<"p指向的地址"<<p<<" "<<"q指向的地址"<<q<<endl; 
     cout<<"交换后"<<"p指向的地址"<<p<<" "<<"q指向的地址"<<q<<endl; 
    return 0; 
 } 

运行结果:结果与值传递相同,不能通过改变形参指针变量的值而使实参指针变量的值改变,这里同值传递一样,都是单向传递的。

 3.修改实参指针变量所指向变量的值

#include <iostream> 
using namespace std; 
 
//从控制台输入2个整数,使用自定义函数交换两个变量的值  
void swap(int *p,int *q) 
{ 
    int temp; 
    temp=*p; 
    *p=*q; 
    *q=temp; 
} 
 
 
int main() 
{ 
   int a,b;  
   cout<<"请输入2个整数:"<<endl; 
   cin>>a>>b;     
    cout<<"交换前"<<"a="<<a<<" "<<"""b="<<b<<endl;             
    int *p,*q; 
    p=&a; 
    q=&b;  
    swap(p,q);     
    cout<<"交换后"<<"a="<<a<<" "<<"""b="<<b<<endl;         
    return 0; 
 } 

运行结果:调用函数时不会改变实参指针变量的值,但是可以改变其指向变量的值。

一般调用函数只能得到一个返回值,但是可以通过调用函数修改主调函数中实参指针变量指向的值,从而达到从被调函数中得到多个值的目的。


本文参考链接:https://www.cnblogs.com/YorkZhangYang/p/13973414.html