c++中可以按引用传值,也可以按指针传值。这两种直接修改传递过来的‘源’值,请问这两种有什么区别不同嘛?
谢谢

解决方案 »

  1.   

    就是指针和引用的区别啊.
    引用就是别名, int a = &b,a是b的引用.a变化也会导致b的变化.
    in *p = b,p指向b对应的地址,b的内容变化并不会引起指针p的变化(指针内容*p的值会变化).同样,p的地址变化,也不会影响b的内容变化.建议看一下c++的相关书籍.
      

  2.   

    int b=11;
    int a=&b;//按楼上说的,这里是a对b的引用,可是这个怎么编译不过,说 error C2440: 'initializing' : cannot convert from 'int *__w64 ' to 'long'
      

  3.   

    楼上的不对吧!
    int b=0;
    int &a = b; //引用申明时必须初始化,所以不可能为空,而指针可为空
    int *c = &b;
      

  4.   

    另外,我觉得 &a 才是 a 的引用
      

  5.   

    int a=(int)&b
    //你这个不是引用,而是取地址
      

  6.   

    int a=(int)&b
    //你这个不是引用,而是取地址
      

  7.   

    to marckle(小马哥) :
    int b=10;
    int a = &b;//这样编译不通过修改为
    int b=10;
    int a = (int)&b;//这样a的值不是对b的引用,a存储的是个地址
      

  8.   

    sorry,写错了. int &a =b,上面写的是取地址.
      

  9.   

    首先,
    int b=11;
    int a=&b;//按楼上说的,这里是a对b的引用,可是这个怎么编译不过,说 error C2440: 'initializing' : cannot convert from 'int *__w64 ' to 'long'之所以通不过是因为a定义的是一个普通的整形变量,而&b是取变量b的地址值,这个和引用不同。
    可以改为:int &a=b;就对了。其次,
    函数中传引用值是直接给实参取了一个别名,在函数中操作使用这个别名和使用原来的传进来的实参一样,不会产生一个临时变量进行操作。
    而如果在函数中传变量的指针,其结果也可以通过指针间接的访问该变量,也可以改变该变量的值,但传指针或传地址本身还是属于传值调用,也就是说同样是给传进来的实参也就是指针申请了一个临时指针变量进行操作。最后,可以参考分析以下程序:
    void swap(int *a, int *b){
        int *temp;
        temp=a;
        a=b;
        b=temp;
    }//该函数不能交换两个整数void swap(int &a,int &b){
        int temp;
        temp=a;
        a=b;
        b=temp;
    }//该函数可以交换两个整数