第三章 语义陷阱

3.5 空指针不等于空字符串

由编译器保证0么有效的指针。

当常数0转化为指针时,这个指针不能被解引用。换句话说。当我们将0赋值给一个指针变量时,绝对不能企图使用该指针所指向的内存中存储的内容。

3.6边界计算与不正确称边界

3.7求值顺序

C语言中仅仅有四个运算符(&&。||,?:,,)存在规定的求值顺序。

逗号是先对左側表达式求值。然后丢弃该值,再对右側求值。

其它的比如a>b,编译器有可能先对a求值也有可能对b求值。

以下的程序是不正确的,由于求值顺序不定:

i=0;

while(i<n)

y[i]=x[i++];

y[i]的地址是不确定的。

3.9整数溢出

在无符号算数运算中。没有所谓的‘溢出’一说:全部的无符号运算都以2的n次方为模。n是结果中的位数。

假设算数运算中的操作数,一个是有符号整数,还有一个是无符号整数,那么有符号整数会被转换为无符号整数操作,溢出不会发生。

版权声明:本文博主原创文章,博客,未经同意,不得转载。

时间: 2024-09-29 08:24:55

第三章 语义陷阱的相关文章

《操作系统精髓与设计原理》习题第三章

第三章习题 3.10.1关键术语 阻塞态:进程在某些事件发生之前不能执行,等待这种事件发生的状态. 退出态:操作系统从可执行进程组中释放出的进程,自身停止了,或者因某种原因被取消. 内核态:某些指令只能在特权状态下执行,而这种特权状态称为内核态. 子进程:由一个进程创建的进程,该进程的终止受父进程的影响. 中断:由外部事件引发进程挂起,CPU转而去处理发起中断的事件,并处理结束后恢复进程的执行. 模式切换:CPU由用户态和核心态之间相互切换. 新建态:进程创建时仅仅创建了对应的进程控制块而没有在

HBase in Action前三章笔记

近期接触HBase,看了HBase In Action的英文版.開始认为还行,做了些笔记.可是兴许看下去,越来越感觉到实战这本书比較偏使用上的细节,对于HBase的具体设计涉及得很少.把前三章的一些笔记帖一下.后面几章内容不打算整理了.并非说书内容不好. key-value存储.强一致性,多个RegionServer节点对client端是不暴露细节的 使用场景:典型的web-search, capture incremental data, ad. click stream, content s

《java并发编程的艺术》读书笔记-第三章Java内存模型(二)

一概述 本文属于<java并发编程的艺术>读书笔记系列,第三章java内存模型第二部分. 二final的内存语义 final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.可以参照之前整理的关键字final.这里作者主要介绍final域的内存语义. 对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序. 初次读一个包含final域的对象的引用,与随后初次读这

&lt;java并发编程的艺术&gt;读书笔记-第三章java内存模型(一)

一概述 本文属于<java并发编程的艺术>读书笔记系列,继续第三章java内存模型. 二重排序 2.1数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性.数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置. 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量. 读后写 a = b;b = 1; 读一个变量之后,再写这个变量. 上面三种情况,只要重排序两个操作的执行顺序,

《UML精粹》第三章 -类图的基本概念

第三章 类图:基本概念 类图可用来描述系统中各种对象的类型,也可描绘出对象间各种各样的静态关系.此外,类图中也可以秀出类的性质(property)与操作(operation),以及可应用到对象间连接方式的一些限制(constraint).在UML中,我们用特性(feature)来代表累的性质与操作这两种概念. 1.性质 性质代表类的结构特性(structural feature).虽然只是一个概念,不过它却可以用两种非常不同的表示法来呈现:属性与关联. 2.属性 属性(attributes)表示

《程序员的自我修养》读书笔记 -- 第三章

第三章 目标文件里有什么 3.1 目标文件的格式 1.目标文件就是源代码编译后还未进行链接的中间文件.因为目标文件与可执行文件的内容和结构很相似,所以一般跟可执行文件的存储形式相同,Linux下统称为ELF可执行文件.动态链接库与动态链接库也使用可执行文件格式存储. 2.ELF文件标准里面把ELF文件归为4类: l  可重定位文件(这类文件包含代码和数据,可被用来链接成可执行文件,静态链接库属于此类.如linux下的.o文件和windows下的.obj ) l  可执行文件(这类文件包含可直接执

第三章 Goroutine调度策略(16)

本文是<Go语言调度器源代码情景分析>系列的第16篇,也是第三章<Goroutine调度策略>的第1小节. 在调度器概述一节我们提到过,所谓的goroutine调度,是指程序代码按照一定的算法在适当的时候挑选出合适的goroutine并放到CPU上去运行的过程.这句话揭示了调度系统需要解决的三大核心问题: 调度时机:什么时候会发生调度? 调度策略:使用什么策略来挑选下一个进入运行的goroutine? 切换机制:如何把挑选出来的goroutine放到CPU上运行? 对这三大问题的解

知识图谱文献综述(第三章 实体识别与链接)

第三章 实体识别与链接 1. 任务定义.目标和研究意义 实体是文本中承载信息的重要语言单位,也是知识图谱的核心单元. 命名实体识别是指识别文本中的命名性实体,并将其划分到指定类别的任 务[Chinchor & Robinson, 1997].常用实体类别包括人名.地名.机构名.日期等. 实体链接主要解决实体名的歧义性和多样性问题,是指将文本中实体名指向其 所代表的真实世界实体的任务,也通常被称为实体消歧.例如,给 一句话“苹果发布了最新产品 iPhone X”,实体链接系统需要将文本中的“苹果”

构建之法前三章读后感

一. 软件作为一个产品,在提供用户使用前经历了许多工序,我们用工程的方式将开发软件的工序,过程加以工程化,系统化.成立了一套完整的体系后,有利于帮助我们开发软件,乃至于大型的系统. 软件具有一定的特殊性,使得软件工程师们做开发提升了一定的难度,但软件工程有助于软件系统的开发,帮助工程师们设计,构建,测试和维护软件.所以,软件工程的最终目的是帮助工程师们创造“足够好”的软件,提高软件的质量,用户满意度,可靠性,可维护性等. 第一章问题:怎么才算是一个真正的软件工程师? 二.   一个优秀的软件,通