`
javasogo
  • 浏览: 1822926 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C核心技术手册(三十四)

 
阅读更多

第五章 表达式和操作符

一个表达式包括常量序列、标识符和操作符。程序中表达式的目的可能为了取得结果值,或赋值。

一个常量、字符串,或对象或函数的标识符均是一个表达式,复杂的表达式会使用括号,被称做主要表达式。

每个表达式都有一个类型,即为表达式结果值的类型,如果表达式不产生结果,它将具有void类型,下面是一些例子(假设变量a的类型为int, 变量z的类型为float_Complex)。

Table 5-1. Example expressions

Expression

Type

'/n'

int

a + 1

int

a + 1.0

double

a < 77.7

int

“A sting literal.”

char *

abort()

voied

sqrt(2.0)

double

z / sqrt(2.0)

double _Complex

从上表可以看出,组合表达式会对操作数使用到操作符,且操作数可能为主要表达式或组合表达式,例如,在乘法中,你可以把一个函数调用当作因数,同样地,函数的参数也可以使用多个操作符,如下例:

2.0 * Sin(3.14159 * fAngleDegrees / 180.0)

5.1 表达式的求值

在我们考虑操作符的细节前,本节提供了少许的原则,将会帮助你理解C中表达式是如何求值的,在分解组合表达式时,操作符的优先级尤为重要。但序列点和左值也同样要了解C语言如何工作。

5.1.1 左值

左值为一个指明对象的表达式,最简单的例了是变量名,首字母L在术语中的意思是 left,因为一个左值指明一个对象,它可以出现在赋值操作符的左边。即:leftexpression = rightexpression.其他没有指明对象的表达式被称做右值,即,右值为一个表达式中,出现在赋值操作符右边,例如,常量和算术表达式。

一个左值通常可以理解为相应对象的地址,除过位域变量、或者使用register定义的变量。操作符产生一个左值包括[]*.下面是一些例子。

Table 5-2. Pointer and array expressions may be lvalues

Expression

Lvalue?

array[1]

Yes, an array element is an object with a location

&array[1]

No;the location of the object is not an object with a location

ptr

Yes;the pointer variable is an object with a loction

*ptr

Yes; what the pointer points to is also an object with a location

ptr + 1

No; the addition yields a new address value, but not an object

*ptr + 1

No; the addition yields a new arithmetic value, but not an object

如果一个对象声明为常量,此时它将不能在表达式的左边使用,即使它是一个左值,如下例描述:

Int a = 1;

Const int b = 2, *ptr = &a;

b = 20; //Error: b is declared as const int.

*ptr = 10; // Error:ptr is declared as a pointer to const int.

在本例中,表达式abptr*ptr均为左值,然而,b*ptr为常量左值,因为ptr声明为指向const int的指针,你不能使用它来修改所指的对象,详细描述见第11章。

一个赋值语句的左操作数,像自增(++)和自减(--)操作符,不仅仅为一个左值,也为一个可修改的左值,可修改的左值不能使用const类型声明,且不为数组类型。如果一个可修改的左值指明一个结构或联合类型的对象,它的成员必须声明,直接或间接地,具有const限定类型。

分享到:
评论

相关推荐

    C语言核心技术(英文文字版)

    ### C语言核心技术(英文文字版) #### 书籍概述 《C语言核心技术》是一本由 Tony Crawford 和 Peter Rinz 合著的经典技术书籍,由著名的 O'Reilly 出版社出版。该书首次发布于2005年12月,全书共计618页,ISBN号...

    c语言核心技术(C in a Nutsbell)

    ### C语言核心技术(C in a Nutshell) #### 知识点概述 《C语言核心技术》是一本由C语言专家Peter Prinz与Tony Crawford合作撰写的权威性书籍,它旨在为C语言程序员提供全面且深入的核心知识和技术指导。本书不仅...

    c语言技术手册 chm

    《C语言技术手册》是一本全面且深入探讨C语言编程的资源,旨在帮助开发者和学习者迅速查询和理解C语言的各种函数及语法特性。CHM(Compiled Help Manual)格式是微软开发的帮助文档格式,通常包含丰富的索引、搜索...

    C语言核心技术 作者Tony rawford

    ### C语言核心技术——《C in a Nutshell》 #### 一、书籍简介 《C in a Nutshell》是由Tony Rawford和Peter Rinz共同编写的关于C语言的权威指南,出版社为O'Reilly,出版日期为2005年12月,ISBN编号为0-596-00697...

    C语言核心技术(C: In a Nutshell)

    ### C语言核心技术(C: In a Nutshell) #### 核心知识点概览 《C语言核心技术》这本书由Tony Crawford和Peter Prinz等作者编写,由O'Reilly出版社于2005年12月出版。全书共有618页,涵盖了C语言的所有核心概念和...

    C语言核心技术(pdf格式)

    《C语言核心技术》不仅适合C语言初学者快速入门,也适合有经验的程序员作为日常工作的参考手册。该书内容丰富,结构清晰,通过大量实例加深读者对C语言的理解和掌握,是C语言学习者和专业程序员的必备书籍之一。 ...

    C语言核心技术(英文PDF)

    《C语言核心技术》不仅适合初学者作为C语言学习的快速入门指南,也适合有经验的程序员作为日常工作的实用参考手册。书中深入浅出地讲解了C语言的各个方面,辅以丰富的示例代码,使读者能够在实践中加深理解和记忆。...

    C核心技术手册 (又名:C - In a Nutshell中文版)

    ### C核心技术手册知识点总结 #### 一、C语言的基础语法 **1.1 C的特征** C语言是一种过程式编程语言,由Dennis Ritchie于1970年代初在贝尔实验室开发,最初是为了实现UNIX操作系统及其应用程序能够尽可能地与...

    LINUX内核技术手册2.pdf

    根据提供的信息,《LINUX内核技术手册2.pdf》是一本专注于Linux内核配置、构建及安装的专业技术书籍。以下是对该书所涉及的关键知识点的详细总结: ### 一、书籍基本信息 - **书名**: Linux内核技术手册 - **作者*...

    云打印C-Lodop技术手册

    《云打印C-Lodop技术手册》是一本详细介绍如何利用C-Lodop进行云端打印操作的技术文档。C-Lodop,全称为Cloud Lodop,是一款高效便捷的云打印解决方案,尤其适用于小票、箱贴、财务单等各类文档的远程打印需求。其...

    H3C核心网产品技术参考资料汇总集.rar

    02H3 C VEPC3200核心网故障处理手册pdf 03H3CBBU3100系列基带处理单元故障处理手册,p 04H3 C VEPC3200产品开局自检手册pdf 05H3 C VMEGW3200技术白皮书pdf 06移动通信技术概述pdf 07H3CEPC3108核心网特性手册(E2123)...

    C语言核心技术(英文).pdf

    综上所述,《C语言核心技术》这本书不仅是一本C语言的入门指南,还是一本详尽的参考手册。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过系统地学习这些内容,读者可以更高效地使用C语言进行编程,并解决...

    S3C2416核心板开发板硬件手册

    ### S3C2416核心板开发板硬件...综上所述,S3C2416核心板及其开发板为各类嵌入式系统设计提供了强大的硬件基础,其详细的硬件手册则为开发者提供了全面的技术指导和法律提示,是进行相关项目开发不可或缺的参考资料。

    MySQL核心技术手册(第二版)][1].(美)戴尔.扫描版.part2

     ·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。  ·给出了几个指导章节用于帮助新手入门。  ·为php、perl和c语言提供了应用程序编程接口(api)。  ·在每章的api开头部分提供了简要的指南。  ...

Global site tag (gtag.js) - Google Analytics