我的理解是开一小段内存存放a的ASCII码值,再开一段内存放数值2,
但是我们打印a值的时候显示的是2,那么a和2所在的内存地址是存在什么样的联系呢
我是非计算机专业的,正在自学,感觉很迷糊,希望知道的指点下,谢谢
请问其他语言是否也都这样,对某变量赋的值其实并不在内存中,只是在需要的时候,程序从代码中做了调用呢
追答程序的内存分为代码空间(不变) 和运行空间(运行时会变化,保存了代码当前执行的位置,好像你放电影放到一段时间,那有个栈指针把这个地方记住)
2作为常数存在于代码空间 而变量存在于运行的内存空间 有个地址
我好奇的是变量a在内存里只有存储a这字符的信息,使用这个变量的时候怎么联系到它所被赋予的值的呢?比如对变量重新赋值,这个变量又是怎么跟新值联系上的呢
追答编译器知道a实际上只是一个名字 给你看的 在编译器眼里它就是一个地址。 所以赋值都是针对地址的,编译器知道a的地址是唯一的
那么变量的值是否如一楼所说的,是程序做的转换,其实内存中并没有存放呢
其他语言在调用变量的值的时候,也都是在代码那里找到变量的值么
变量的值在内存中肯定要存储的,并且就放到符号表中的各项的内容中,但是是以二进制存储的
所谓转换,并不是程序转换的,是系统将二进制的内容以用户要求的格式输出,比如内存中存储了00000010这样一个二进制数,现在用户要求以%d,也就是整型输出,系统就输出2
所谓代码,在程序编译之后就不再存在什么代码了,都已经是指令, 编译之后所有变量都以二进制形式存储在符号表中,要使用时,直接通过符号ID,也可以说直接通过地址就可以找到了,没代码什么事情