手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

C 程式设计从零开始之赋值操作符

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

 赋值语句

  前面已说明,要访问内存,就需要相应的地址以表明访问哪块内存,而变量是个映射,因此变量名就相当于一个地址。对于内存的操作,在一般情况下就只有读取内存中的数值和将数值写入内存(不考虑分配和释放内存),在C 中,为了将一数值写入某变量对应的地址所标识的内存中(出于简便,以后称变量a对应的地址为变量a的地址,而直接称变量a的地址所标识的内存为变量a),只需先书写变量名,后接“=”,再接欲写入的数字连同分号。如下:

a = 10.0f; b = 34;

  由于接的是数字,因此就能够接表达式并由编译器生成计算相应表达式所需的代码,也就可如下:

c = a / b * 120.4f;

  上句编译器将会生成进行除法和乘法计算的CPU指令,在计算完毕后(也就是求得表达式a / b * 120.4f的值了后),也会同时生成将计算结果放到变量c中去的CPU指令,这就是语句的基本作用(对于语句,在《C 从零开始(六)》中会周详说明)。

  上面在书写赋值语句时,应该确保此语句之前已将使用到的变量定义过,这样编译器才能在生成赋值用的CPU指令时查找到相应变量的地址,进而完成CPU指令的生成。如上面的a和b,就需要在书写上面语句前先书写类似下面的变量定义:

float a; long b;


  直接书写变量名也是一条语句,其导致编译器生成一条读取相应变量的内容的语句。即能够如下书写:

a;

  上面将生成一条读取内存的语句,即使从内存中读出来的数字没有任何应用(当然,假如编译器开了优化选项,则上面的语句将不会生成任何代码)。从这一点连同上面的c = a / b * 120.4f;语句中,都能够看出一点——变量是能够返回数字的。而变量返回的数字就是按照变量的类型来解释变量对应内存中的内容所得到的数字。这句话也许不是那么容易理解,在看过后面的类型转换一节后应该就能够理解了。
因此为了将数据写入一块内存,使用赋值语句(即等号);要读取一块内存,书写标识内存的变量名。所以就能够这样书写:a = a 3;
假设a原来的值为1,则上面的赋值语句将a的值取出来,加上3,得到结果4,将4再写入a中去。由于C 使用“=”来代表赋值语句,很容易使人和数学中的等号混淆起来,这点应注意。

  而如上的float a;语句,当还未对变量进行任何赋值操作时,a的值是什么?上帝才知道。当时的a的内容是什么(对于VC编译器,在开启了调试选项时,将会用0xCCCCCCCC填充这些未初始化内存),就用IEEE的real*4格式来解释他并得到相应的一个数字,也就是a的值。因此应在变量定义的时候就进行赋值(但是会有性能上的影响,但是很小),以初始化变量而防止出现莫名其妙的值,如:float a = 0.0f;。

  赋值操作符

  上面的a = a 3;的意思就是让a的值增加3。在C 中,对于这种情况给出了一种简写方案,即前面的语句能够写成:a = 3;。应当注意这两条语句从逻辑上讲都是使变量a的值增3,但是他们实际是有区别的,后者能够被编译成优化的代码,因为其意思是使某一块内存的值增加一定数量,而前者是将一个数字写入到某块内存中。所以假如可能,应尽量使用后者,即a = 3;。这种语句能够让编译器进行一定的优化(但由于现在的编译器都很智能,能够发现a = a 3;是对一块内存的增值操作而不是一块内存的赋值操作,因此上面两条语句实际上能够认为完全相同,仅仅只具备简写的功能了)。

  对于上面的情况,也能够应用在减法、乘法等二元非逻辑操作符(不是逻辑值操作符,即不能a &&= 3;)上,如:a *= 3; a -= 4; a |= 34; a >>= 3;等。

  除了上面的简写外,C 还提供了一种简写方式,即a ;,其逻辑上等同于a = 1;。同上,在电脑编程中,加一和减一是经常用到的,因此CPU专门提供了两条指令来进行加一和减一操作(转成汇编语言就是Inc和Dec),但速度比直接通过加法或减法指令来执行要快得多。为此C 中也就提供了“ ”和“—”操作符来对应Inc和Dec。所以a ;虽然逻辑上和a = a 1;等效,实际由于编译器可能做出的优化处理而不同,但还是如上,由于编译器的智能化,其是有可能看出a = a 1;能够编译成Inc指令进而即使没有使用a ;却也依然能够得到优化的代码,这样a ;将只剩下简写的意义而已。



[1] [2] [3] [4] [5] 下一页

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS