int &x; 可以吗? & 和* 具体讲解

 我来答
段禹墨
2018-10-13
知道答主
回答量:2
采纳率:0%
帮助的人:1602
展开全部

在c++中引用有两种, 我们常称一个用'&'修饰的变量为引用, 引用分常量引用和非常量引用两种, 其中常量引用指的是以const作为修饰符(但其实并未用'&'修饰)的变量(如const int x), 而此处所定义的int& x即为非常量引用. 这是当'&'在声明变量时的用法,所以int &x;是可以的. 而类似的我们使用*来定义变量时也有int *p,亦即定义一个指向int型的指针p的用法.

'&'运算符和'*'运算符除了可以在声明变量时使用外, 也可以在一般语句中使用, 我们常用'&'来表示取某一变量的地址, '*'来表示取某个地址中的值; 

另外,我们也可以将'&'和'*'用于函数的声明以及定义中去. 应该知道, 一个函数头主要包含了返回值,函数名和参数三个部分. 所以, 当*位于不同位置时也会有不同含义, 诸如int * func() 和 (int *)func()和int (* func)(), int func(int *a),他们的区别为:

  1. int * func() : func是一个函数,返回值是int *类型.

  2. (int *)func(): 一般来说是将func的返回值强制转换为int *, 实际效果与1无太大差别.

  3. int (* func)(): func是一个函数指针,它指向一个没有形式参数的函数,这函数返回一个int值.

  4. int func(int *a): 我们常用a表示数组的首地址, 亦即int func(int a[]).

而'&'用于函数头时,最多的用处就是用于修饰形参表示引用, 这样就可以在子函数中修改原本不能修改的形参的值了.

本质:引用是别名,指针是地址,具体的:①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。出处:网页链接

引用链接的这一段, 一是因为他讲的很好(我不想打字了[delete]), 而且, 这里也涉及到了int &x的赋值问题, 因为有时我们书写int &x = 10;时会发现报错: 非常量引用的初始值必须为左值, 而

int k = 10;int &x = k;却可以. 我认为这段话中"引用则总是指向在初始化时被指定的对象"很好的解释了原因, 亦即k是一个开辟了空间的对象, 而10只是一个常数, 他们的存储位置是不同的(这里感兴趣的话可以去搜资料查找c++的四个存储位置).

ps: 手打不易,求采纳,翻滚翻滚~

呼啦啦bal
2018-11-16
知道答主
回答量:4
采纳率:0%
帮助的人:2353
展开全部
随便举个例子
int pop(sqSTack &st,int &x;)
这是一个形参,sqSTack &st表示传递st这个栈的地址。也就是说,当你在这个形参里改变这个栈的内容,无论你这个形参是否返回(是否是void),主函数中的st也随之改变。
int &x也是一样,传递的是x的地址,在形参中改变x的值,主函数中的x值也改变。
而int x只是传递了x此时的值。
把地址比做地皮,上面的内容比做房子。
int x就是把这个房子的平面图给你,你可以改,但是那个房子没有变。
int &x就是把这块地给你,你把房子重新装修,这个房子就真正地变了。后面你再把这个房子的平面图给别人,给的是装修后的平面图。
不知道这么说你能不能听懂。
*就是定义一个指针变量,指针变量相当于地标,标出地皮位置。比如int*p=a[i],翻译过来是让int型指针p指向a[i]的地址。理解成把p这个地标放在a[i]的地皮上,并且p是变量,可以移动。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e90b8b6
2018-01-24 · TA获得超过1100个赞
知道小有建树答主
回答量:1634
采纳率:48%
帮助的人:349万
展开全部
&是引用,*是指针变量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式