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

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

相关文章

基本知识点

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人)、物联网实验

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/zhujiatc@126/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

JavaScript整理笔记

JavaScript笔记 JavaScriptJavaScript简介快速入门JavaScript用法基础语法注释关键字显示数据输出innerHTML innerText属性返回值的区别调试 数据类型和变量数据类型数字(Number)字符串(String)布尔值(Boolean)null(空值)和undefined(未定义)数组(Array)对象(Object)函数(Function) 变量