CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

有关左值与右值在编译时的问题

楼主xjyr(先活着)2006-03-03 12:27:05 在 C/C++ / C语言 提问

在《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

相关问题

  • 有关csc编译
  • 有关perl的编译!
  • 有关编译的问题
  • 有关编译的问题
  • 有关gcc编译器
  • 有关gcc编译器
  • 有关多文件编译??
  • 有关DLL的编译错误
  • 求助:有关反编译工具
  • 有关Tornado编译的问题!

关键词

  • 编译
  • 内存
  • 分配
  • 运行
  • 地址
  • 内存单元
  • 时候

得分解答快速导航

  • 帖主:xjyr

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo