有关左值与右值在编译时的问题
在《C专家编程》第4章有这样一句话:
x = y;
x是左值,左值在编译时可知,左值表示存储结果的地方;
y是右值,右值直到运行时才知,有无特别说明,右值表示“Y的内容”
我不明白的是“左值在编译时可知”这句话,我认为只有在对变量x分配内存单元的情况下,x作为左值才会有确切的存储地址,难道在编译阶段就给x分配内存空间了么?
如果是这样,那变量y是不是也分配了内存单元?
我是不是可以继续做这样的假设:
int x = 5;
在编译时,只给x分配内存单元,但并不执行x =5 ;这个语句;也就是说x在编译完后存放的仍是个垃圾数字,可相应的问题又来了:“如果编译时分配的内存单元与与你运行时的内存单元不一致时怎么办呀?”
这是不是编译原理课程的内容啊?
请高手指教!
char a[] ="adwdaw";
是不是在编译时a就有了确定的左值?
问题点数:0、回复次数:1Top
1 楼Holmescn(Holmes·Conan)回复于 2006-03-03 12:51:51 得分 0
你把编译理解错了吧。编译不是就把C变成汇编,最后到机器语言吗?如果你知道一点汇编的话
int x=5;可能会编译成 mov eax,5 当然也可能是mov ptr dword[address],5。但无论是eax也好,还是一个地址值也罢,都必需是cpu可以操作的一个地址值(寄存器也可以看成一个地址),在你不运行的时候,它们只不过是一些二进制数,只有在进行的时候才可以由cpu解释,并分配内存。所以说,编译后,就已经知道这个东西放在哪儿了,只是运行的时候才显示在内存罢了。
char a[]="abcdef";
这里的abcdef会放在一个特别的区域,叫数据区,并标识一个地址,它存在a中Top




