鱼C论坛

 找回密码
 立即注册
查看: 2470|回复: 6

关于引用的问题。

[复制链接]
发表于 2014-7-2 13:54:32 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 拈花小仙 于 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;
}

最佳答案

查看完整内容

引用本质上来说,只是给变量起了一个别名,并没有什么太大的用处(因为人家已经有名字了,你再起个别名有什么特别的意义吗?)但对于你的第一个例子中,new int在堆上建立了一个无名的对象,并返回它的指针,这时用引用给一个无名对象其别名可能还有那么一点点用(其实直接用指针操作这个对象也是可以的,并且这种做法更常见) 引用真正的用处在于,它做函数的参数(或返回值)的时候,实现的语义不是C语言里中值传 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-2 13:54:33 | 显示全部楼层
       引用本质上来说,只是给变量起了一个别名,并没有什么太大的用处(因为人家已经有名字了,你再起个别名有什么特别的意义吗?)但对于你的第一个例子中,new int在堆上建立了一个无名的对象,并返回它的指针,这时用引用给一个无名对象其别名可能还有那么一点点用(其实直接用指针操作这个对象也是可以的,并且这种做法更常见)
       引用真正的用处在于,它做函数的参数(或返回值)的时候,实现的语义不是C语言里中值传递,而是引用传递,即引用类型的实参可以在函数中直接被改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-2 15:26:48 | 显示全部楼层
refNum = a;  // 之后引用又有什么妙用?

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

最后加一句

delete (int*)&refNum;

妹子这么用的不多的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;

}

满意请采纳,不满意请追问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-2 20:15:23 | 显示全部楼层
呵呵! 小仙,估计楼上的回答,已经解决你的问题了吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-2 21:55:45 | 显示全部楼层

引用本身是不需要内存空间的,而这个却动态分配存储空间,是为了新声明这个名字的引用占着吗?为什么去掉*号就是错误的语句,该怎么解释我浑然不知。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-2 22:13:31 | 显示全部楼层
拈花小仙 发表于 2014-7-2 21:55
引用本身是不需要内存空间的,而这个却动态分配存储空间,是为了新声明这个名字的引用占着吗?为什么去掉 ...
#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;
}
可以这么写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 15:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表