C++中,int * &a=new int 到底是什么意思

根据实验得出结论:a是静态空间上的一个别名。a是指针变量。如果这样说,那么int&c;intb;c=b;这样会错误,但所谓的错误其实是运行到第三步才错误。第一步int&c... 根据实验得出结论:

a 是静态空间上的一个别名。 a是指针变量。

如果这样说,那么

int &c ;
int b;

c= b;

这样会错误,但所谓的错误其实是运行到第三步才错误。第一步 int & c;没有错,系统给 c分配了一块内存,只不过后面又要修改地址所以出错。

int * &a=new int ;

可以说这里引用没有初始化,它接受了系统给他分配的随机静态内存地址当做是初始化了???
我问题里的矛盾点看明白没?

int * &a=new int ;请问a是在静态空间还是在动态空间?

是静态吧?请问是不是系统随机分配的呢?是 吧?

作为一个引用,能接受随机分配的内存?

那我 Int & a; 这样为什么不行,系统随机分配一个内存,这个内存的别名叫a
展开
 我来答
吉祥二进制
高粉答主

2013-07-15 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84582

向TA提问 私信TA
展开全部

引用就是对其它标识符的一个别名。


1、引用在一定程度上以理解为 T* const p; 


p是常量*p不是常量,所以在声明定义时必须初始化。 因此你所说的

int &c ;
int b;
c= b;

编译器一般不会编译通过的。不是说错误出现在第三步,而是在第一步时就错了


2、为什么引入引用的概念

  代替指针,使代码编写更简洁,语法层上就是变量的别名,汇编角度和指针的概念是一样的,都是借助lea指令(ia32平台上) ,特别是面向对象的思想引入后,对象的内存越来越大,单纯的像c语言的struct结构体做返回值 会耗费大量的时间。


3、int * &a=new int ;

 这个应该是编译不能通过的,c++是强类型的编程语言,左边是int *&类型,右边是int *,他们俩是不一样的类型,因此不能赋值的。


 当然如下面的代码可以编译通过,但是如下面的代码纯属花码,即不产生任何机器指令,编译器有可能直接忽略掉这个表达式。从而只生成一句 ret的指令。

int main(){
int * &a=new int ;
return 0;
}


如果你加上一句cout<<a之类的操作语句,你会发现不能编译通过的。

 

我是菜鸟,希望能帮到你,观楼主英俊潇洒,风流倜傥,必当世豪杰,诚邀加入0x30百度贴吧,共商义举,建不世之功!

更多追问追答
追问
我问题里的矛盾点您看明白没?

int * &a=new int ;请问a是在静态空间还是在动态空间?

是静态吧?请问是不是系统随机分配的呢?是 吧?

作为一个引用,能接受随机分配的内存?

那我 Int & a; 这样为什么不行,系统随机分配一个内存,这个内存的别名叫a
追答
int main() { int *&a = new int; } 如这个代码
a在栈空间,它所指示的内存区域在堆空间也就是动态内存空间。
吾守护奇迹
2013-07-15 · TA获得超过202个赞
知道小有建树答主
回答量:237
采纳率:66%
帮助的人:156万
展开全部
定义引用的时候必须初始化,也就是说定义引用的时候必须告诉编译器,这是谁的引用(别名)
int *&a = new int;定义一个指针的引用,这个引用是new int分配的内存的别名
追问
怎么是new int分配的内存的别名

a , 他就是一个静态内存空间的别名, a是指针变量,是堆的地址, * a是堆的内容,

但是怎么能说引用是堆内存的别名?

这个引用,是静态内存空间的别名
追答
引用可以理解为一个变量的别名,它自身是不可修改的,一旦对它初始化之后,就没办法让这个引用来表示其他变量的别名,就好像如果指定小张是张三的别名,那么以后就不能有小张是李四的别名这种说法了
其实你以上的int *&a = new int;可以改写成下面这样
int *p = new int;
int *&a = p;
另外引用在使用上和它的原始变量没有区别,区别只在传参的时候属于传址
所以,如果不是用在传参的时候,是没有必要使用引用的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cqdjyy01234
2013-07-15 · TA获得超过1147个赞
知道小有建树答主
回答量:267
采纳率:50%
帮助的人:306万
展开全部
int * &a=new int; vs2012和gcc4.8编译错误。
new int返回右值指针,不能赋值给非常值引用(这可以从gcc的编译错误中看出)。原因是,临时变量理论上在表达式结束后会被析构,因而在后续代码中不可使用。应该改为int* const &a = new int; 即:将返回的指针赋给常值引用,因而该临时变量的生命周期得到延长。事实上,这等价于int* const a = new int;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
浪漫冰块
2013-07-15 · 超过20用户采纳过TA的回答
知道答主
回答量:94
采纳率:0%
帮助的人:45.5万
展开全部
这里a是一个引用,它是指向一个new int 类型的引用
//这样理解就好了
int *pb;
pb = new int;
int *&a = pb;
追问
我不就是这样理解的?但是我的疑问。。。您看明白么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
spensercai
2013-07-15
知道答主
回答量:30
采纳率:0%
帮助的人:12.1万
展开全部
int a;
int *&a=new int;
就是int *a=new int
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式