关于引用的问题。
本帖最后由 拈花小仙 于 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++编程小组 引用本质上来说,只是给变量起了一个别名,并没有什么太大的用处(因为人家已经有名字了,你再起个别名有什么特别的意义吗?)但对于你的第一个例子中,new int在堆上建立了一个无名的对象,并返回它的指针,这时用引用给一个无名对象其别名可能还有那么一点点用(其实直接用指针操作这个对象也是可以的,并且这种做法更常见)
引用真正的用处在于,它做函数的参数(或返回值)的时候,实现的语义不是C语言里中值传递,而是引用传递,即引用类型的实参可以在函数中直接被改变。 refNum = a;// 之后引用又有什么妙用?
就是在刚刚开辟的int内存空间存了一个5
最后加一句
delete (int*)&refNum;
妹子这么用的不多的 #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 15:26 static/image/common/back.gif
refNum = a;// 之后引用又有什么妙用?
就是在刚刚开辟的int内存空间存了一个5
引用本身是不需要内存空间的,而这个却动态分配存储空间,是为了新声明这个名字的引用占着吗?为什么去掉*号就是错误的语句,该怎么解释我浑然不知。 拈花小仙 发表于 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]