zoukankan      html  css  js  c++  java
  • C++传值方式和传址方式(以交换函数为例)

    //以下三个函数都是实现将变量 i 和 j 的值交换
    /*=========================方式一=====================================*/
    /****************下面的函数无法实现此功能********************************/
    /*==================================================================*/
    #include <iostream>
    using namespace std;
    int main()
    {
        void swap(int, int);        //函数声明
        int i=3;
        int j=5;
        swap(i,j);
        cout << i << " "<<j <<endl;
        return 0;
    }
    
    void swap(int a,int b)
    {
        int temp;
        temp=a;
        a = b;
        a=temp;
    }
    /*=========================方式二====================================*/
    /********************使用指针变量作形参,实现两个变量的值的交换********/
    /*==================================================================*/
    #include <iostream>
    using namespace std;
    int main()
    {
        void swap(int *, int *);
        int i=3;
        int j=5;
        swap(&i, &j);
        cout << i << " "<< j <<endl;
        return 0;
    }
    void swap(int *p1,int *p2)
    {
        int temp=0; 
        temp=*p1;
        *p1=*p2;
        *p2=temp;
    }
    /*==========================方式三==================================*/
    /**********************实现两个变量的值的交换,用“引用”作形参**************/
    /*==================================================================*/
    #include <iostream>
    using namespace std;
    int main()
    {
        void swap(int &, int &);
        int i=3;
        int j=5;
        swap(i, j);
        cout << i << " "<< j <<endl;
        return 0;
    }
    
    void swap(int &a, int &b)
    {
        int temp;
        temp=a;
        a=b;
        b=temp; 
    }

     总结:

      1、方式一未能实现两个参数的交换。

      2、前两种方式传递的是实参的值。即是传值方式

      3、前两种方式在调用swap函数时,对形参要分配存储单元,方式三对引用型形参a和b不分配存储单元,它们分别与实参i和j共享同一存储单元。而方式三swap函数传递的是实参变量的地址而不是实参变量的值。即传址方式。

      4、在方式三中,&a不是"a的地址",而是指“a是一个整形变量的(引用)别名”,&是引用声明符。由于是形参,不必对其初始化,即未指定它们是哪个变量的别名。当main函数调用swap函数时,进行虚实结合,把实参变量i和j的地址传给形参a和b.这样i和j的地址传给a and b.这样i和a的地址相同,二者是同一变量,即a成为i别名。同理,b成为j的别名。在swap函数中,a和b的值交换,那么i和j的值也交换了。

  • 相关阅读:
    F
    Common Subsequence
    Neighbor House
    Robberies(背包)
    Stock Exchange(LIS最长上升子序列问题)
    Compromise(LCS)
    POJ-3356 AGTC (最短编辑距离问题)
    Monkey and Banana(LIS最长上升子序列)
    网络编程之网络协议
    面向对象高级
  • 原文地址:https://www.cnblogs.com/zxwAAA/p/2996207.html
Copyright © 2011-2022 走看看