变量名,变量值和内存地址,这三者在内存中是以某种编码方式存储在同一块空间里吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量名,变量值和内存地址,这三者在内存中是以某种编码方式存储在同一块空间里吗相关的知识,希望对你有一定的参考价值。

不是
变量名,除非是调试版本,否则不带有变量名信息
如果是调试版本,会单独存储在一段空间,供调试工具读取,所以和实际运行的内存完全不同
变量值,根据变量类型,存在堆区或者栈区
变量地址,除非保存为指针,否则不会存储变量地址追问

变量名这个意思是机器自己而言根本不需要变量名,而只是给编程人员看的。在运行阶段是不会分配给变量名空间,是这意思吗?

追答

是这样的,机器只需要你要访问哪块内存,长度多少就可以了,甚至都不需要变量类型

参考技术A char 数据类型是占一字节,所以:sizeof(a) = 1个字节
保存数据的内存地址(对于 32 为系统)是32位,即 4 字节,所以:sizeof(&a) = 4个字节
变量名存储的地址,是在栈中。
知道数据内容和变量名是分开存储:
最好顺便将堆、栈的概念弄清楚,举个例子,如:
仓库,可以分为管理区和储存区,当然,管理区可以存放标识货物保存在储存区位置的标识牌,也可以保存货物。
char a; ,相当于在管理区(栈)中的一个位置吧保存了一件货物,&a 相当于获取这件货物在管理区的位置(内存地址)。当然,管理区也要编号。
char *pa 相当于在管理区(栈)申请一个位置,用于存放货物指示牌,pa = new char[100],new char[100] 相当于在货物储存区(栈)申请了一块区域,pa = new char[100],相当于在指示牌 pa 上标明这个货物储存区的位置。
栈(内存)是静态的,编程时就确定,当然内存释放不用人工干预。堆(内存)是动态的,在程序执行是由你写的代码申请的,当然内存释放由你决定。
参考技术B 应该不是,看你怎么存

以上是关于变量名,变量值和内存地址,这三者在内存中是以某种编码方式存储在同一块空间里吗的主要内容,如果未能解决你的问题,请参考以下文章

015 变量的三个特征

python垃圾箱-垃圾回收

Python17--变量

函数对象

python入门之垃圾回收机制用户交互算术运算符

Python函数参数详解