引用就是自身没有地址的指针么?

Liby 2011-06-23 09:25:53

耗在指针引用这两个章节的时间都有半个月了
是这个理么?
...全文
260 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
langshanglibie 2011-06-24
  • 打赏
  • 举报
回复
另外一个名字而已。
Liby 2011-06-24
  • 打赏
  • 举报
回复
VS2010下win32控制台应用程序运行时按alt+8直接关了- =。。。
pathuang68 2011-06-24
  • 打赏
  • 举报
回复
指针和引用的声明方式:
声明指针: char* pc;
声明引用: char c = 'A'
char& rc = c;

它们的区别:
①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。
②从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域,因为引用声明时必须初始化,从而指向一个已经存在的对象。引用不能指向空值。
③从编译上看,程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针。
④不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。
⑤理论上,对于指针的级数没有限制,但是引用只能是一级。如下:
int** p1; // 合法。指向指针的指针
int*& p2; // 合法。指向指针的引用
int&* p3; // 非法。指向引用的指针是非法的
int&& p4; // 非法。指向引用的引用是非法的
注意上述读法是从左到右。

详情,请参考:
http://blog.csdn.net/pathuang68/archive/2009/04/14/4071672.aspx
赵4老师 2011-06-24
  • 打赏
  • 举报
回复
指针即地址
引用即别名

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
luciferisnotsatan 2011-06-24
  • 打赏
  • 举报
回复
引用就是别名,外号
辰岡墨竹 2011-06-24
  • 打赏
  • 举报
回复
引用不是指针,引用是编译器编译时自动将其替换成别的变量地址。
qq120848369 2011-06-24
  • 打赏
  • 举报
回复
指针是变量,地址存储于指针.

内存的访问通过地址,而地址存在指针里.
Liby 2011-06-24
  • 打赏
  • 举报
回复
谢谢大家啦,该怎么结贴呢。以前发的帖子也没结贴的~~~
翻越寒武 2011-06-24
  • 打赏
  • 举报
回复
变量名可以说是地址的名称,该变量前用&就取得地址了。引用又时是别名是因为它绑定地址了,就像指针指向了该地址一样
wo_de_fen_dou 2011-06-24
  • 打赏
  • 举报
回复
12楼说的很完整 很好
qingcairousi 2011-06-24
  • 打赏
  • 举报
回复
引用和指针不同。指针在运行时是有实体的,也就是说,是有内存地址来存放这个指针的。而引用则不同,引用只是在编程的时候作为别名使用,编译之后就变成了所引用的那个对象了。所以,在运行时,指针值可以改写。而在运行时,既然不存在“引用”这一说,自然也就无法改写“引用值”了。
nfer_cn 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 libylovexixi 的回复:]
不纠结了,学后面的先。。。
[/Quote]
对,等用到的时候,慢慢就理解了
Liby 2011-06-23
  • 打赏
  • 举报
回复

不纠结了,学后面的先。。。


至善者善之敌 2011-06-23
  • 打赏
  • 举报
回复
引用是别名,指向同一个地址,所以只能被初始化一次
  • 打赏
  • 举报
回复
引用怎么说了,其实是个别名

有时候说是个指针,但又不确定
huang_555 2011-06-23
  • 打赏
  • 举报
回复
变量别名吧!!!  
Defonds 2011-06-23
  • 打赏
  • 举报
回复
别名。
CGabriel 2011-06-23
  • 打赏
  • 举报
回复
搞不清楚你为什么这样想的。。没有地址的指针有存在的价值么。。
liutengfeigo 2011-06-23
  • 打赏
  • 举报
回复
暂时理解为:不能改变指向的指针吧.
其实不是...

64,691

社区成员

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

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