拈花小仙 发表于 2014-7-2 13:54:32

关于引用的问题。

本帖最后由 拈花小仙 于 2014-7-5 19:47 编辑

#include <iostream>
using namespace std;
int main()
{
    int &refNum = *new int;   //这句该如何解释,为什么去掉 * 就是错误的语句?
    int a = 5;
    refNum = a;                     // 之后引用又有什么妙用,C++为什么支持这样写?
    cout << a << endl;
    return 0;
}
C++编程小组

仰望天上的光 发表于 2014-7-2 13:54:33

       引用本质上来说,只是给变量起了一个别名,并没有什么太大的用处(因为人家已经有名字了,你再起个别名有什么特别的意义吗?)但对于你的第一个例子中,new int在堆上建立了一个无名的对象,并返回它的指针,这时用引用给一个无名对象其别名可能还有那么一点点用(其实直接用指针操作这个对象也是可以的,并且这种做法更常见)
       引用真正的用处在于,它做函数的参数(或返回值)的时候,实现的语义不是C语言里中值传递,而是引用传递,即引用类型的实参可以在函数中直接被改变。

戏++ 发表于 2014-7-2 15:26:48

refNum = a;// 之后引用又有什么妙用?

就是在刚刚开辟的int内存空间存了一个5

最后加一句

delete (int*)&refNum;

妹子这么用的不多的

折心灬小轩 发表于 2014-7-2 19:11:54

#include <iostream>
using namespace std;
int main()
{
    int &refNum = *new int;          //定义了一个int型变量refNum,用它的地址动态定义了一个整形变
                                                //量,也就相当于int *refNum
    int a = 5;
    refNum = a;                        //refNum已经是一个*int了,那么,让它指向一个类型相符的变量自
                                             //然是可以的,这时refNum的值是a的地址,*reNum是a的值5
    cout << a << endl;               //输出a的值自然是没有问题的,你也可以输出fefNum的值试一试,也
                                             //是5
    return 0;

}

满意请采纳,不满意请追问

青玄 发表于 2014-7-2 20:15:23

呵呵! 小仙,估计楼上的回答,已经解决你的问题了吧!

拈花小仙 发表于 2014-7-2 21:55:45

戏++ 发表于 2014-7-2 15:26 static/image/common/back.gif
refNum = a;// 之后引用又有什么妙用?

就是在刚刚开辟的int内存空间存了一个5


引用本身是不需要内存空间的,而这个却动态分配存储空间,是为了新声明这个名字的引用占着吗?为什么去掉*号就是错误的语句,该怎么解释我浑然不知。

戏++ 发表于 2014-7-2 22:13:31

拈花小仙 发表于 2014-7-2 21:55 static/image/common/back.gif
引用本身是不需要内存空间的,而这个却动态分配存储空间,是为了新声明这个名字的引用占着吗?为什么去掉 ...

#include <iostream>
using namespace std;
int main()
{
        int* &refNum = new int;   //这句该如何解释,为什么去掉 * 就是错误的语句?
        int a = 5;
        refNum = &a;                     // 之后引用又有什么妙用,C++为什么支持这样写?
        *refNum = 4;
        cout << a << endl;
        getchar();
        return 0;
}可以这么写
页: [1]
查看完整版本: 关于引用的问题。