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

张有尚
  • 15

原问题:

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

修改后问题:

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

回复
阅读 222
3 个回答

你混淆了语义和具体的实现,你说的内存中有个地方存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,后面这个地址还可以存入其它值。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏