一个简单而又不简单的问题

smlboy2014 2005-09-19 12:55:46
我在看c++的引用的时候,很多地方都说它是一个别名,现在我连变量名字都搞不明白,看到“别名”这样的词就更显得彷徨了!所以我想请教高手以下问题:

<1>. void main()
{
int a=3;
int b=a;
int &ra=a;
}

我在vc中调试窗口看到以下内容
a=3
b=3
ra=3
&a=0x0012ff7c
&ra=0x0012ff7c
&b=0x0012ff78
*ra=3
*a=cxx0034:Error:types incompatible with operation
*b=cxx0034:Error:types incompatible with operation

我想请问,到底这代表什么意思?
变量名a到底是个什么东西?地址?
a=b这样一个操作到底计算机做了什么工作?
..............

小弟学C也多年了,但对这个问题一直似懂非懂,今天和别人讨论起别名来,
才感到真的有必要弄清楚里面的细节,
哪位大虾给个电子资料最好,谢谢了!


请问,是不是指在0x0012ff7c这个地址中存放了常量3的地址?
...全文
542 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyly30 2005-09-20
  • 打赏
  • 举报
回复
上楼,能不能推荐一本ASM的书 呀
超叔csdn 2005-09-20
  • 打赏
  • 举报
回复
建议楼主学学汇编!
everestsun 2005-09-20
  • 打赏
  • 举报
回复
引用不同于指针,一般指针可以修改,指向其他地址,指针所指的内容不变。而对引用的修改即是直接修改被引用的变量。也就是ra可以与a相互替代。
wsnly13 2005-09-19
  • 打赏
  • 举报
回复
楼上的, 自己手动输入&a...
lovejsp 2005-09-19
  • 打赏
  • 举报
回复
我在vc中调试窗口看到以下内容
a=3
b=3
ra=3
&a=0x0012ff7c
&ra=0x0012ff7c
&b=0x0012ff78
*ra=3
*a=cxx0034:Error:types incompatible with operation
*b=cxx0034:Error:types incompatible with operation

-----------------------------------------------------------
楼主在哪可以看到&a,&b,&ra的信息啊。我的调试窗口中只有a,b,ra的值啊。
LQliqing 2005-09-19
  • 打赏
  • 举报
回复
0x0012ff7c这个地址中存放的不是常量3的地址!!!
那是整型变量a的地址!!!也是ra的地址,因为ra就是a!!!
foochow 2005-09-19
  • 打赏
  • 举报
回复
&a=0x0012ff7c //a的地址
&ra=0x0012ff7c //a的地址
zhouhuahai 2005-09-19
  • 打赏
  • 举报
回复
void main()
{
int a=3;
int b=a;
int &ra=a;
}

我在vc中调试窗口看到以下内容
a=3
b=3
ra=3
&a=0x0012ff7c //a的地址
&ra=0x0012ff7c //ra的地址
&b=0x0012ff78 //b的地址
wsnly13 2005-09-19
  • 打赏
  • 举报
回复
什么是变量
变量为我们提供了一个有名字的内存存储区可以通过程序对其进行读写和处理C++
中的每个符号变量都与一个特定的数据类型相关联这个类型决定了相关内存的大小布局
能够存储在该内存区的值的范围以及可以应用其上的操作集我们也可以把变量说成对象
object 下面是5 个不同类型的变量定义在后面我们会介绍变量定义的细节情况
int student_count;
double salary;
bool on_loan;
string street_address;
char delimiter;
变量和文字常量都有存储区并且有相关的类型区别在于变量是可寻址的
addressable 对于每一个变量都有两个值与其相关联
1.它的数据值存储在某个内存地址中有时这个值也被称为对象的右值rvalue 读
做are-value 我们也可认为右值的意思是被读取的值read value 文字常量和变量都可
被用作右值
2.它的地址值——即存储数据值的那块内存的地址它有时被称为变量的左值lvalue
读作ell-value 我们也可认为左值的意思是位置值location value 文字常量不能被用作
左值
在下面的表达式中
ch = ch - 'O';
变量ch 同时出现在赋值操作符的左边和右边右边的实例被读取与其相关联的内存中
的数据值被读出左边的ch 用作写入减操作的结果被存储在ch 的位置值所指向的内存区
中原来的数据值会被覆盖在表达式的右边ch 和文字字符常量用作右值在左边ch
用作左值
一般地赋值操作符的左边总是要求一个左值例如下列的写法将产生编译错误
// 编译错误: 等号左边不是一个左值
// 错误: 文字常量不是一个左值
0 = 1;
// 错误: 算术表达式不是一个左值
salary + salary * 0.10 = new_salary;




在 c++ primer 上抄来的,应该懂了吧?
shine2000 2005-09-19
  • 打赏
  • 举报
回复
a=3 應該是a所指地址中存放的數據為3
b=a 把a地址中的內容move給b地址中?
sunrainy 2005-09-19
  • 打赏
  • 举报
回复
晕菜
a不是常量,const int a=3才是常量
常量存储空间在全局数据段
而变量a和b存储位置在堆栈上

*a 变成去访问0x0000003的地址,这个地址是不能访问地
dadd23 2005-09-19
  • 打赏
  • 举报
回复
int a=3;的时候
a是变量名,3表示a这个变量的值是3。
地址0x0012ff7c,因为你的调试中&a=0x0012ff7c
&a是取变量a的地址

a=b是把变量a的值给了变量b,因此变量b的值也成了3,但是地址不一样,所以取地址也不一样
应用理解为指针,因此&ra的地址和a的地址一样&ra=0x0012ff7c,
还有你的*a,和*b值得是a和b这两个地址所指向的东西,而你定义的是int a,int b根本不是指针变量,所以当然不能显示值了
healer_kx 2005-09-19
  • 打赏
  • 举报
回复
... ... ...
a是整数。typename 是 int, 能*a这么玩嘛? ?你也得巩固基础知识。
mickyx 2005-09-19
  • 打赏
  • 举报
回复
我觉得应该是这个地址中存放的是数据3,
a=b是将b中的数据值赋给了a
正因为a是常量,所以*a错误
healer_kx 2005-09-19
  • 打赏
  • 举报
回复
a = b这样一个操作到底计算机做了什么工作?

move [a], [b]



healer_kx 2005-09-19
  • 打赏
  • 举报
回复
关键就是那个引用嘛,!引用就是指针,。typename * const p;但是用法是非指针用法。
所谓别名alis是一种说法,你要是学过VB的话,就能更好的理解别名的用意了。

就是一个物体(对象)的另外一个名字。

C++引用常常用于传递参数(见C++ Primer)

*a, *b可以这么写嘛??
C语言里, * 叫做 “解引用”, &叫做 “取地址”。

*在这层含义商,只能用在指针之前,而ra前面也可以解除引用,也说明了引用的本质就是指针。

64,690

社区成员

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

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