暑期讲座遗漏知识点整理一

2024-05-25 15:18

本文主要是介绍暑期讲座遗漏知识点整理一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、有符号数与无符号数的强制类型转换问题
    上次遇到一个问题,在比较两sizeof返回值的时候出现了意想不到的错误,原因在于sizeof返回的是无符号类型,所以出现错误。
    有符号数和无符号数的区别在于第一位表示正负数,还是数值。换句话说,有符号的二进制数最高位是符号位,剩下的是数值部分的补码(正数的补码是其本身,负数的补码是该数值取反加一)。例如int a = -1;unsign b; b = a;
那么printf(“%u”,b);结果是4294967295。
二、表达式的副作用
C 语言中,术语副作用是指对数据对象或者文件的修改,序列点是指程序运行中的一个特殊的时间点,在该点之前的所有副作用已经结束,并且后续的副作用还没发生。C 语句结束标志——分号(;)是序列点。也就是说,C 语句中由赋值、自增或者自减等引起的副作用在分号之前必须结束。任何完整表达式运算结束的那个时间点也是序列点。所谓完整表达式,就是说这个表达式不是子表达式。而所谓的子表达式,则是指表达式中的表达式。
     经常见到m = 1; n = m+++m++;类似的题目,求最后n的值。这里 n = m++ + m++ 是完整表达式,而 m++ 是它的子表达式。这个完整表达式运算结束的那一点是一个序列点,int m = 1, n; 中的 ; 也是一个序列点。也就是说,m++ + m++ 位于两个序列点之间。标准规定,在两个序列点之间,一个对象所保存的值最多只能被修改一次。但是我们清楚可以看到,上面这个例子中,m 的值在两个序列点之间被修改了两次。这显然是错误的!这段代码在不同的编译器上编译可能会导致 n 的值有所不同。比较常见的结果是 n 的值最后被修改为 2 或者 3。在此,各位只要记住这是错误的,别这么用就可以了。
三、关于求平均值所引起的思考
 求两个数的平均值,我想大多数人一定是用(x+y)/2这种方式来求,但是如果
a > INT_MAX,b > INT_MAX,那么最后平均值我们怎么实现呢?可以考虑通过位运算求得((x^y)>>1)+(x&y),知道了所谓的答案并不是目的,关键在于其中的思考过程,为什么不能直接看出问题的本质,又怎么样在看出问题的陷阱后及时想出完善的解法值得我们深思,学习不允许半点马虎的地方,处处应该细心,关注可能出现的问题,同时还要需要牢固的基础,这样才能在技术的道路上越走越远。
四、扫描集
ANSIC 标准向 scanf() 增加了一种新特性,称为扫描集(scanset)。扫描集定义一个字符集合,可由 scanf() 读入其中允许的字符并赋给对应字符数组。扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。
具体作用是:如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果一经发现不属于就结束提取。该方法会自动加上一个'\0'到已经提取的字符后面。在“[]”内,还可以加入另外一个字符来修饰它的作用:“^”。这个符号可以理解为“补集”,即,扫描除方括号之内的其它字符:如果输入的字符不属于方括号内字符串中某个字符,那么就提取该字符;如果一经发现输入的字符属于该字符,则结束。为了简便,我们可以这样简写[^A-Z]
五、assert断言
注意:assert是宏,而不是函数。在C的assert.h头文件中。
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );
assert的作用是先计算表达式expression,如果其值为假(即为0),那么它先向标准错误流stderr打印一条出错信息,然后通过调用abort来终止程序运行;否则,assert()无任何作用。宏assert()一般用于确认程序的正常操作,其中表达式构造无错时才为真值。完成调试后,不必从源代码中删除assert()语句,因为宏NDEBUG有定义时,宏assert()的定义为空。
使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include <stdio.h>
#define NDEBUG
#include <assert.h>


                                            ————参照百度词条

这篇关于暑期讲座遗漏知识点整理一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001872

相关文章

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

StarRocks索引详解(最新整理)

《StarRocks索引详解(最新整理)》StarRocks支持多种索引类型,包括主键索引、前缀索引、Bitmap索引和Bloomfilter索引,这些索引类型适用于不同场景,如唯一性约束、减少索引空... 目录1. 主键索引(Primary Key Index)2. 前缀索引(Prefix Index /

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

暑期学习总结

iOS学习 前言无限轮播图换头像网络请求按钮的configuration属性总结 前言 经过暑期培训,完成了五个项目的仿写,在项目中将零散的内容经过实践学习,有了不少收获,因此来总结一下比较重要的内容。 无限轮播图 这是写项目的第一个难点,在很多项目中都有使用,越写越熟练。 原理为制造两个假页,在首和尾分别制作最后一页和第一页的假页,当移动到假页时,使用取消动画的方式跳到

讲座笔记1

1. 攻击者 2.链式 未知的apt 防御模型,访问关键资源,可信验证,不的转到替身,开展隐蔽防御, 1.触发点博弈,绕过问题 2.替身对抗 围绕这两个问题 马尔科夫链,形象化,15分钟处。 提高替身的诱骗效果 防御成功概率 = 两个问题处成功的概率之积 网络攻击研判,mdata 理论 多维关联认知模型 巨规模 ,关联性,演化性 模拟人脑结构 组成作用认知实现,模拟学习模型

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验