《C陷阱与缺陷》第一章心得与笔记

本文深入探讨C语言中常见的陷阱与缺陷,包括等号与比较运算符的混淆、按位与逻辑运算符的区别、词法分析的贪心法则、整型与字符常量的误解。通过具体示例解析这些陷阱如何导致程序错误,以及如何避免。

《C陷阱与缺陷》第一章心得与笔记 词法陷阱

1.1 =和==

‘=’是赋值运算符;’=='是比较运算符。
eg1:

if (x = y)

本例本想判断x与y是否相等,写成x = y后,if的条件就变成了先将y赋值给x,再判断x的值是否为0。
eg2:

while(c = ' ' || c == '\t' || c == '\n')
{
	c = getc(f);
}

本例中循环语句上的本意是跳过文件中的空格符、制表符、和换行符,本想写成c == ‘ ’,结果误写成了c = ’ ‘。由于赋值运算符’=‘的优先级要比逻辑运算符’||‘低,所以,实际上是将一下表达式的值赋值给了c = ’ ’ || c == ‘\t’ || c == ‘\n’,因为 ‘ ’不等于0,(’ '的ASCII码值为32),所以while循环会一直运行,知道文件读取结束。文件读取结束之后循环是否继续,取决于getc库函数的具体实现。
eg3:

if ((filedesc == open(argc[i], 0)) < 0)
	error();

在本例中,如果open函数执行成功,将返回0或者正数,如果执行失败,则返回-1。上面的代码本意是将open函数的返回值赋值给filedesc,然后判断filedesc是否小于0。将’=‘误写成’‘之后,则变成了先判断filedesc的值与open函数的返回值是否相等,再判断是否小于0,由于’'的结果只有0或者1,永远不可能小于0,则if的条件恒为1。有些编译器会提示相应的警告。

1.2 & 和 | 不同于 && 和 ||

&:按位与
|:按位或
&&:逻辑与
||:逻辑或

1.3 词法分析中的“贪心法”

C语言编译器判断由多个字符组成的符号的规则:每一个符号应该尽可能的包含更多的字符。

编译器将程序分解成符号的方法是:从左到右一个字符一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符串组成的字符串已不再可能组成一个有意义的符号。这个处理过程被称为“贪心法”。

需要注意的是,除了字符串和字符常量,符号的中间不能嵌有空白(空格符、制表符和换行符)。

1.4 整型常量

如果一个整形常量的第一个字符是数字0,那么该常量将被视作八进制数。

1.5 字符与字符串

用单引号引起的一个字符实际上代表一个整数,整数值对应该字符在编译器采用的字符集中的序列值。因此,对于采用ASCII字符集的编译器而言,'a’的含义与0141(八进制)或者97(十进制)严格一致。

用双引号引起的字符串,代表的是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制值为0的字符’\0’初始化。
eg1:

下面语句

printf("Hello world\n");

char hello[] = {'H', 'e', 'l', 'l', 'o', ' ',
			    'w', 'o', 'r', 'l', 'd', '\n', 0};
printf(hello);

是等效的。

基于NSGA-III算法求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文围绕基于NSGA-III算法的微电网多目标优化调度展开研究,重点介绍了如何利用该先进多目标进化算法解决微电网系统中多个相互冲突的目标(如运行成本最小化、碳排放最低、供电可靠性最高等)的协同优化问题。文中结合Matlab代码实现,详细阐述了NSGA-III算法的基本原理、在微电网调度模型中的建模过程、约束条件处理、目标函数设计以及仿真结果分析,展示了其相较于传统优化方法在求解高维、非线性、多目标问题上的优越性。同时,文档还提供了丰富的相关研究案例和技术支持背景,涵盖电力系统优化、智能算法应用及Matlab仿真等多个方面。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事能源优化领域的工程技术人员;尤其适合正在进行微电网调度、多目标优化算法研究或撰写相关论文的研究者。; 使用场景及目标:①掌握NSGA-III算法的核心思想及其在复杂能源系统优化中的应用方式;②学习如何构建微电网多目标调度模型并利用Matlab进行仿真求解;③为科研项目、毕业论文或实际工程提供算法实现参考和技术支撑。; 阅读建议:建议读者结合文中提供的Matlab代码实例,逐步调试运行并深入理解算法流程模型构建细节,同时可参考文档中列出的其他优化案例进行横向对比学习,以提升综合应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值