zoukankan      html  css  js  c++  java
  • 传值

    #include <iostream>
    using namespace std ;
    void Swap(int x, int y) ;
    int main(void)
    {
                int a = 1 ;
                int b = 2 ;
                cout << "a = " << a << ", " << "b = " << b << endl ;
                Swap(a, b) ;
                cout << "a = " << a << ", " << "b = " << b << endl ;
                system("pause") ;
                return 0 ;
    }        

       

    一:值传递

    void Swap(int x, int y)

    {

                int temp = x ;

                x = y ;

                y = temp ;

    }

    输出结果:

    a = 1, b = 2

    a = 1, b = 2

    原因:Swap(int x, int y)函数采用值传递的方式,传入的实参实际上是a和b的副本而非其本身,所以对副本的改变并不会反应到a和b本身上。


    二:引用传递

    void Swap(int &x, int &y)

    {

                int temp = x ;

                x = y ;

                y = temp ;

    }

    输出结果:

    a = 1, b = 2

    a = 2, b = 1

    原因:Swap(int x, int y)函数采用引用传递的方式,传入的实参实际上是a和b的引用,对引用的改变会直接反应到a和b本身上。

     

    三:指针传递

    1.  改变指针本身

    void Swap(int *x, int *y)

    {

                int *temp = x ;

                x = y ;

                y = temp ;

    }

    调用方法:Swap(&a, &b) ;

    输出结果:

    a = 1, b = 2

    a = 1, b = 2

    原因:Swap(int x, int y)函数采用指针传递的方式,传入的实参实际上是a和b的指针的副本,而且改变的是副本本身而非其间接引用,所以不会影响的指针所指向的值,即a和b本身上。

     

    2.  改变指针的间接引用

    void Swap(int *x, int *y)

    {

                int temp = *x ;

                *x = *y ;

                *y = temp ;

    }

    调用方法:Swap(&a, &b) ;

    输出结果:

    a = 1, b = 2

    a = 2, b = 1

    原因:Swap(int x, int y)函数采用指针传递的方式,传入的实参虽然也是a和b的指针的副本,但是改变的是副本的间接引用,无论是指针本身还是其副本,都指向相同的值,所以这个改变会反应到a和b本身上。

    #include<stdio.h>
    #include<stdlib.h>
    void change(int **,int *);
    void change1(int , int );
    void change2(int &,int &);
    void main()
    {
            int i=3 , j=4;
            int *p1=&i;
            int *p2=&j;
            printf("change before *p1=%3d *p2=%3d ",*p1,*p2);
            change1(i,j);
            printf("change1  *p1=%3d *p2=%3d ",*p1,*p2);
            printf("change1  i  =%3d j  =%3d ",i,j);
            i=3 , j=4;
            change2(i,j);
            printf("change2 after i  =%3d j  =%3d ",i,j);
            i=3 , j=5;
            change(&p1,p2);
            printf("change after *p1=%3d *p2=%3d ",*p1,*p2);
            printf("change after i  =%3d j  =%3d ",i,j);       
            system("pause");
    }
    void change(int **a,int *b)  //传地址
    {
            **a = *b;
    }
    void change1(int a , int b)  //值传递
    {
            a=b;
    }
    void change2(int &a,int &b)  //引用,传本身
    {
            a=b;
    }

    C语言在传值过程中,如果要对传入的数据进行修改,就必须传入要修改操作的变量的地址;数组传值弱化为指针,所以数组名就相当于数组地址。

  • 相关阅读:
    MongoDB配置多个ConfigDB的问题(笔记)
    Python访问PostGIS(建表、空间索引、分区表)
    Python访问MySQL数据库
    Python访问MongoDB数据库
    Mapnik读取PostGIS数据渲染图片
    Python批量处理CSV文件
    Spring Mongo配置多个Mongos
    hadoop2.2.0_hbase0.96_zookeeper3.4.5全分布式安装文档下载
    【Git】(1)---工作区、暂存区、版本库、远程仓库
    微信扫码支付功能(2)---用户扫码支付成功,微信异步回调商户接口
  • 原文地址:https://www.cnblogs.com/meihao1203/p/8023445.html
Copyright © 2011-2022 走看看