C陷阱与缺陷之词法陷阱
该文章及后续文章均为阅读《C陷阱和缺陷》后的读数笔记,方便以后回顾
C陷阱和缺陷电子版图书下载地址:点击打开链接
第一章词法陷阱
1.1 = 不同于 ==
在C语言中,符号=作为赋值运算符,符号==作为比较运算符。一般而言,赋值运算相对比较运算出现得更频繁,因此字符数较少的符号=就被赋予更常用的含义——赋值操作。在编写程序的时候,注意不要将赋值操作写完比较相等的操作,也不要将比较操作写为赋值操作。
1.2 & 和 | 不同于 && 和 ||
在C语言中,&和|为按位运算符,它们对操作数的处理方式是将其视为一个二进制的位序列,分别对其每位进行操作。
&&和||为逻辑运算符:其处理结果通常为“真”或者“假”,&&和||运算符在其左侧操作数能够确定最终结果时根本不会对右侧操作数求值。
1.3 词法中的“贪心法”
C语言中既存在单目运算符,也存在多目运算符。那么当编译器读入一个字符'/'后又跟一个字符'*'时,那么编译器就必须判断是将其作为一个符号,还是作为两个分别的符号对待。C语言对这个问题的解决方案可以归纳为一个很简单的规则:每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个字符一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。这个处理策略有时被称为“贪心法”。
这样就解释了为什么表达式a---b的含义与a-- -b相同,而与a---b不同。
1.4 整型常量
如果一个整型常量的第一个字符是数字0,那么该常量将被视作八进制数。因此10和010所表示的数字截然不同。
1.5 字符和字符串
C语言中字符和字符串含义迥异,用单引号引起的一个字符实际代表上代表一个整数;整数值对应于该字符在编译器采用的字符集中的序列值,一般是ASCII字符集
用双引号引起的字符串,代表的却是一个指向无名字符数组起始字符的指针,该字符数组被双引号之间的字符以及一个额外的二进制值为0的字符'\0'初始化。
C陷阱与缺陷之词法陷阱相关推荐
- 《C陷阱与缺陷》----词法“陷阱”
导言: 由于一个程序错误可以从不同层面采用不同方式进行考察,而根据程序错误与考察程序的方式之间的相关性,可以将程序错误进行划分为各种陷阱与缺陷: ①.词法"陷阱" ②.语法&quo ...
- 《C陷阱与缺陷》词法陷阱-贪心法
C语言的某些符号,例如/ .* .和=,只有一个字符长,称为单字符符号.而C语言中的其他符号,例如/ 和 = = ,以及标识符,包括了多个字符,称为多字符符号.当C编译器读入一个字符'/'后又跟了一个 ...
- 【C陷阱与缺陷】----语法陷阱
- 《C陷阱与缺陷》第三章
文章目录 前言: 语义"陷阱" 指针与数组 操作符:sizeof() 指针 非数组的指针 作为参数的数组声明 避免"举隅法" 空指针并非空字符串 边界计算与不对 ...
- 《C陷阱与缺陷》一第1章 词法“陷阱”1.1 =不同于==
本节书摘来自异步社区<C陷阱与缺陷>一书中的第1章,第1.1节,作者 [美]Andrew Koenig,更多章节内容可以访问云栖社区"异步社区"公众号查看 第1章 词法 ...
- 《C陷阱与缺陷》第一章【词法“陷阱”】
前言: 先在这里和关注我的小伙伴们说一声对不起,因为我已经连续三天没更新文章了.是因为学校的线上课程结束了,线下几乎每一天都是满课,写博客的时间少了很多,不过我会在五一假期期间尽量把之前的补回来. 这 ...
- C陷阱与缺陷(一)词法“陷阱”、语法“陷阱”
第一章 :词法"陷阱" 术语"符号"指的是程序的一个基本组成单元(就像一个句子中的单词,无论在哪个句子中,表达意思都一样),而组成符号的字符序列就不同,同一组字 ...
- 《C陷阱与缺陷》一导读
前 言 C陷阱与缺陷 对于经验丰富的行家而言,得心应手的工具在初学时的困难程度往往要超过那些容易上手的工具.刚刚接触飞机驾驶的学员,初航时总是谨小慎微,只敢沿着海岸线来回飞行,等他们稍有经验就会明白这 ...
- c语言局限性,C语言陷阱与缺陷.pdf
C 语言陷阱和缺陷[1] winxos 11-01-28 winxos 11-01-28 原著:Andrew Koenig - AT&T Bell Laboratories Murray Hi ...
最新文章
- Java多线程- 线程池的基本使用和执行流程分析 - ThreadPoolExecutor
- mysql 连续签到天数_天天拿帮会通宝 帮会签到真给力
- 两种比较不错的密码修改方案
- 修改服务器劫包,APP游戏TCP包被劫持篡改的一些解决方案
- python 之 collections
- .NET Core整合log4net以及全局异常捕获实现2
- 使用 SAP Uiveri5 遇到 passport 依赖的问题以及解决方案
- 梯度 cv2.sobel_TensorFlow 2.0中连续策略梯度的最小工作示例
- 使用CSS和JQuery,模拟超链接的用户单击事件
- LVM源码分析2-libdaemon
- Magnific Popup – 免费的响应式 jQuery Lightbox 插件
- 最佳实践 | 联通数科基于 DolphinScheduler 的二次开发
- 2022年第十三届蓝桥杯省赛B组python题目部分解题
- ps中的颜色替换,通道的认识,颜色通道,复合通道,单色通道,通道抠图,滤镜,镜头校正滤镜,液化
- C# 中的 delegate, Lambda 表达式 和 event
- 超级计算机 弦理论,暗能量导致宇宙加速膨胀?弦理论能否帮忙解决?
- 制作帮助文档的好助手- WORD2CHM WORD2HTML
- 9.16nbsp;瑞晟软件笔试
- 【RA6M4学习RT-Thread相关bug答疑】
- 爬取沪深股票并找出最近1个月创出新高的股票
热门文章
- 使用Vitamio打造自己的Android万能播放器—— 手势控制亮度、音量、缩放
- 解决MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk
- 影响IPSec的网络问题
- 10月券商App行情刷新及交易体验评测报告
- Android常用控件,四大组件,intent应用
- java.sql.SQLException: null, message from server: Host 'XXXXX' is not allowed to connect
- 服务器ibms管理系统,【科普】关于IBMS智能化集成系统
- SpringCloud 分布式链路追踪、分布式日志系统
- php 定位_PHP进阶学习之Geo的地图定位算法详解
- jsbox 导入_JSBox: 一个创造工具的工具