指针与引用,初始化为:0

OrgPrimer 2014-10-11 06:09:52

//指针
int *x1=0;
const int *x2=0;



//引用
int &y1=0; //错!为什么?
const int &y2=0;


问题:
1.指针变量,初始化:0。
是指:指针不指向任何对象。
对么?

2.引用变量,可以初始化为0么?
那么,它是什么意思?
...全文
674 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-10-13
  • 打赏
  • 举报
回复
指针即地址 引用即别名
Binzo 2014-10-13
  • 打赏
  • 举报
回复
引用是别名。别名,顾名思义,应该有名字。0没有名,int i = 0; i是名。
OrgPrimer 2014-10-13
  • 打赏
  • 举报
回复
[code=c] const int &a=0
OrgPrimer 2014-10-13
  • 打赏
  • 举报
回复
指针变量,可以初始化为:0。没陷阱! 引用变量,也可以初始化为:0。有陷阱!
OrgPrimer 2014-10-13
  • 打赏
  • 举报
回复
各位: 20楼问题,谁说说呢?
OrgPrimer 2014-10-12
  • 打赏
  • 举报
回复

const  int  &y2=0; //引用变量,初始化为:0
上面语句,是什么意思?
qqww33444 2014-10-12
  • 打赏
  • 举报
回复
非常好>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
kkk2017 2014-10-12
  • 打赏
  • 举报
回复
其实引用和指针是一样的,都是储存的地址。 引用为0可以这样写 int &y1=*(int*)0;
C_Scholar 2014-10-12
  • 打赏
  • 举报
回复
引用 17 楼 lm_whales 的回复:
有一个跟指针和和引用有关的问题 指针初始化为 0 ,就是初始化为空指针,也就是让指针,指向0 这个地址。 常量引用初始化为0 ,只是把被引用的对象,设置为某个值为零的常量对象, 而不是引用地址为零的对象,不是引用一个不存在的对象。 一切引用,都对应一个具体对象。 而指针为0 ,通常不指向任何对象 由于C++引用本身,具有某种常量性质,所以引用必须初始化
空指针指向 零 这点。。恐怕有问题吧! 我觉得空指针,应该是 只分配了 4 个字节的内存,而这块内存里面没有任何地址数据!
C_Scholar 2014-10-12
  • 打赏
  • 举报
回复
问题一:指针初始化 为零 ,也就是空指针。没有指向任何地方。。留着需要的时候直接拿来用就OK了。 问题二:引用不能初始化为零,因为引用可以看做是另外一个变量的 第二个名字(也就是大多数书上说的别名)。
lm_whales 2014-10-11
  • 打赏
  • 举报
回复
有一个跟指针和和引用有关的问题 指针初始化为 0 ,就是初始化为空指针,也就是让指针,指向0 这个地址。 常量引用初始化为0 ,只是把被引用的对象,设置为某个值为零的常量对象, 而不是引用地址为零的对象,不是引用一个不存在的对象。 一切引用,都对应一个具体对象。 而指针为0 ,通常不指向任何对象 由于C++引用本身,具有某种常量性质,所以引用必须初始化
lm_whales 2014-10-11
  • 打赏
  • 举报
回复
mujiok2003 讲的非常棒,这位很厉害的 补充一下,C++ 中 1)引用必须初始化 2)常量引用(对常量的引用), 可以用常量,或者说常量表达式,初始化。 3)C++11右值引用。。。mujiok2003 已经说明了 4)函数的参数,在函数每次调用的时候,初始化。 所以,函数里的参数,都是已经初始化了的数据,包括引用参数。 所以,没有违反引用必须初始化,这一条 5)引用不能通过赋值,更换所引用的对象,对引用的赋值,是对被引用对象的赋值。 6)C++ 引用成员变量,在对象初始化时初始化, 类一般是构造函数的初始化表中初始化 结构一般,在初始结构对象的,初始化表中初始化 C++11 :在类内,可以初始化成员变量,所以引用应该也不例外 跟引用初始化,赋值相关的大概就这么多。
mujiok2003 2014-10-11
  • 打赏
  • 举报
回复
0可以赋值/转换为任何类型的地址, 这是标准明确规定的。
mujiok2003 2014-10-11
  • 打赏
  • 举报
回复
这是关于左右值属性的, 不是常量变量的。
铖邑 2014-10-11
  • 打赏
  • 举报
回复
你可以这么写,但是完全没必要这么写 目测常量引用,也只有函数传参数的时候是必要的 如果你的代码只有你一个人看,你可以随心所欲,爱怎么写都可以,但是写完了,千万不要给别人看
mujiok2003 2014-10-11
  • 打赏
  • 举报
回复
引用 11 楼 mujiok2003 的回复:
[quote=引用 9 楼 xpdavis 的回复:] 记住:声明引用的时候绑定一个变量,这就对了 否则,你的代码会给人制造麻烦
应用可以绑定常量的。 [/quote] 应用-->引用
mujiok2003 2014-10-11
  • 打赏
  • 举报
回复
引用 9 楼 xpdavis 的回复:
记住:声明引用的时候绑定一个变量,这就对了 否则,你的代码会给人制造麻烦
应用可以绑定常量的。
mujiok2003 2014-10-11
  • 打赏
  • 举报
回复
表达式0是个一个右值,不能绑定到非常左值引用。

//C++ 0x
int&& x = 0; //OK
铖邑 2014-10-11
  • 打赏
  • 举报
回复
记住:声明引用的时候绑定一个变量,这就对了 否则,你的代码会给人制造麻烦
OrgPrimer 2014-10-11
  • 打赏
  • 举报
回复
《C++primer》第四版 4.2 指针的引入 4.2.2 指针的定义和初始化 4.指针可能的取值 若指针保存0值,表明它不指向任何对象。 6. 指针初始化和赋值操作的约束 (1)0值常量表达式。 这本书说,指针变量,可以初始化为:0。 是表示指针不指向任何对象。 不过,引用变量,好像就没说明了!
加载更多回复(7)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧