我知道“&”是取地址,如p=&data,则p指向了变量data。但下面的两个函数声明我不理解,请高手指教,请讲的通俗一些,详细一些,便于理解,谢谢了:(1)CType& Function( )  //不理解,但CType* Function( )我理解;(2)CType1 Function(CType2 &var ) // 不理解,但CType1 Function(CType2 *var )我理解。

解决方案 »

  1.   

    &在c里只有取地址的意思,但在c++和vc里还有引用的意思
      

  2.   

    1、表示反回Ctype的引用
    2、要传递引用
      

  3.   

    引用楼上“你可以把“引用”理解为被引用变量的别名,所有对引用的操作都等于对被引用变量的操作”续问————那么:(1)函数“CType& Function( ) ”返回了哪个变量的引用了呢?      (2)函数“CType1 Function(CType2 &var ) ”传递了哪个变量的引用了呢?请指教,谢谢。 
      

  4.   

    (1)这种用法本身就是错误的,返回了一个局部变量的引用(2)调用Function(x);
    函数中对VAR的操作都等于对X的操作
      

  5.   

    回并问楼上:    (1)CType& Function( ) 我是仿照书上写的,书上的是:CRect& GetBoundingRect(){return m_rectBounding;}。那么为什么说是错误的?另外他返回了哪一个局部变量的引用?请指教,谢谢。
      

  6.   

    哦。m_rectBounding是在函数GetBoundingRect()的外面定义的:CRect m_rectBounding;
      

  7.   

    void ReturnNum1(int a)
    {
      a=10;
    }
    void ReturnNum2(int &a)
    {
      a=10;
    }
    //////////////////////
    ....
    int b;
    b=5;
    ReurnNum1(b);
    //函数运行后b=5;这种方式下相当于int a;a=b;a=10;
    ReturnNum2(b);
    //函数运行后b=10;这种方式下,a与b完全一样,a=10;相当于b=10;
      

  8.   

    引用是这样定义的:引用型变量是一种不具备自己的实际数据保存空间的变量,它的实质仍然是指针,但引用型变量采用了不同于指针的表示方式。使用引用型变量可以简化对函数有多个返回值时的处理,使得程序清晰明了。(也就是说,是2个不同名字的变量使用同一个地址空间。)
    原形:数据类型&  变量名=相同数据类型的变量;
    例:int& nVal1=nVal2
    nVal1与nVal2同为int型。。使用同一个地址。。对nVal1的操作就是对nVal2的操作。如
    nVal2=8;
    nVal1=3;
    那么,MessageBox(int(nVal2));的输出值也为3;
    这就是引用的实质。上面提到的问题是这样的。
    1)CType& Function( )  引用的方式不太正规基本属于错误,可是语法不算错误。结果没测试过。大概应该返回的是函数本身。也就是自己引用了自己。。就如同这个简单的例子。         int &nVal1=nVal2
    (2)CType1 Function(CType2 &var ) 他其实是对函数本身的参数的引用。
    也就是对函数原形的参数的引用,简单理解为Functiong(CType2 x)
    CType2 &var=x;我是一个打了一年基础的垃圾程序员,呵。。希望我们共同学习。。共同进步。
    希望我的讲解能给你带来方便。。
      

  9.   

    我写错了。。(1)的例子应该是int &nVal1=nVal1;
      

  10.   

    非常感谢楼上的朋友给我讲得这么详细,读完你的回复,我已经完全明白了第(2)种的引用形式;对于第(1)种的引用形式还有一点模糊。另外,我说一点意见,我觉得引用就是解决了函数的传址问题,其实完全可以用1nt* var这种容易理解的形式代替引用。VB中,有ByVal var和ByRef var来表示传值和传址,我觉得是光辉的典范。而C++就显得烦琐了。
      

  11.   

    谢谢。顺便问一下:VC6好象不支持以前的C语言呀,如:在C语言中,下面的函数定义是正确的
    int Function(var)
    int var;
    {
       printf(var);
       return 0;
    }但在C++中却是错误的,为什么?
      

  12.   

    printf(var);关键在这里。。
    printf()这是c 里面的。。不是 vc++里面的。。所以不支持。。
    但是。。在vc++中是可以实现的。。
    在c中这个程序用到了一个头文件。。
    你只需要把他的名字+上.c包含在你的vc++的头文件里就可以了。
    记得要声明std::函数名
      

  13.   

    我知道要包含文件  #include "stdio.h",不是这个原因。
    原因是VC6不允许这样定义函数:
                               int Function(var)
                               int var;
                               {
                                 ...;
                               }
    VC6要求将int var;放入{ }中:
                               int Function(var)
                               {
                                   int var;
                                    ...;
                               }
    因此,以前的C程序不能移植到VC6中了。
      

  14.   

    哦,说错了:
    VC6要求 不用语句int var;但参数表中要求有说明符int,:
                               int Function(int var)
                               {
                                 
                                    ...;
                               }