• 【C++编程基础】——使用指针交换两个变量的值


    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;
     } 

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

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

    转载文章链接已标明,如有侵权请告知。文章仅作为知识记忆所用,如有错误,敬请指正。
  • 相关阅读:
    warning: rpmts_HdrFromFdno: Header V4 DSA/SHA1 Signature, key ID 192a7d7d: NOKEY
    warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
    535 5.7.8 Error: authentication failed: generic failure安装EMOS时SMTP测试报错
    mysql-libs版本冲突卸载不了
    history
    CentOS 7 / RHEL 7 运行单用户模式进行root的密码重置
    chkconfig
    Linux主机名域名修改问题
    Mysql正常启动之后默认使用的文件
    解决mysql“Access denied for user 'root'@'localhost'”
  • 原文地址:https://www.cnblogs.com/YorkZhangYang/p/13973414.html
Copyright © 2020-2023  润新知