int a=10;这样的赋值语句,请问这个a是他的地址吗?

原问题:

对于int a =10 ;这样的赋值语句,请问这个a是他的地址吗,还是内存中有一个值10,然后他对应于一个地址,然后a指向这个地址?

修改后问题:

对于 int a=10; 这样的赋值语句,请问一下这个a在程序的执行过程中,是怎么绑定的?以我们人的看法自然是知道这个a是一个变量,当前a变量存储了10,但是本身这个a需要存储吗?是否这个a又是表示一个地址?

阅读 5.2k
6 个回答

你混淆了语义和具体的实现,你说的内存中有个地方存10之类的说法,是这条语句在冯诺依曼体系下的一种具体的物理实现方式。但在C++的语义层面来说,这条语句仅仅说明a是一个变量,它的值是10。&a则是a的地址,通过解引用这个地址能够获取a的值,因此a和*&a都能返回10。

  • 这不是一个赋值语句,这里执行的是初始化过程。
  • a在c++中是一个object的name,object具有如下属性和性质:https://en.cppreference.com/w...
  • &在不同上下文环境中代表不同的含义:它可以构成引用类型,也可以作为取地址符。
  • 根据你的回复来看,建议先找一本比较好的入门书籍逐步学习即可,不要太心急。

其实完整的,这个语句完成了2项工作

  1. 声明了一个int 类型变量a,则就在内存中分配了一个适合存储int的区域,并把该区域以a标识方便后续使用。
  2. 在前述分配的内存区域中,存入了10这个值。

所以

  1. a不是内存地址,按语法&a才是内存地址。
  2. 确实内存中有个位置存入了10这个int值,但并不是你理解那样的顺序,而是现有一个内存地址和a发生联系,再在这个内存地址中存入10,后面这个地址还可以存入其它值。

函数里面 int a=10
a可能在栈上,也可能在寄存器,取决于编译器~
放在哪里,取的时候就从哪里取。这个编译器自己会对应的。

新手上路,请多包涵

a在程序编译后就不存在了,a对编译器来说只是一个符号,编译后取而代之的是一个内存地址,如0024F9C4

新手上路,请多包涵

这是一个初始化语句。
这里“a”是一个变量,“a”在编译之后的程序中是不存在的,“a”的存在只是在程序中给程序员用的。
在程序中“a”所代表的就是一个4比特的内存空间。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题