- 博客(32)
- 收藏
- 关注
转载 快速排序通俗易懂C语言实现
https://blog.csdn.net/vayne_xiao/article/details/53508973#commentsedit
2019-08-14 14:13:11
264
原创 【C语言学习记录20】链接过程
问题工程中的每个C语言源文件被编译后生产目标文件,这些文件如何生成最终的可执行程序?链接器的意义:链接器的主要作用是把各个模块之间相互引用的部分处理好,使得模块之间能够争取的衔接。静态链接由链接器在链接时将库的内容直接加入到可执行程序中。在Linux静态库下的创建和使用:1)编译静态库源码:gcc –c lib.c –o lib.o (目标文件)2)生成...
2019-07-05 15:33:22
326
原创 【C语言学习记录19】编译过程
本节课研究C语言如何编译语言程序。对编译器的了解程度决定代码的产品质量。 file.i 中间代码file.s 汇编文件file.o 二进制文件预编译(文本处理工作)1)处理所有的注释,用空格代替;2)将所有的#define删除,并且展开所有的宏定义;3)处理条件编译命令,#if,#ifdef,#elif,#else,#endif4)处理#include,展开...
2019-07-05 15:33:13
200
转载 PID理解
PID是比例、积分、微分的简称,PID控制的难点不是编程,而是控制器的参数整定。参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解。阅读本文不需要高深的数学知识。 1.比例控制 有经验的操作人员手动控制电加热炉的炉温,可以获得非常好的控制品质,PID控制与人工控制的控制策略有很多相似的地方。 下面介绍操作人员怎样用比例控制的思想来手动...
2019-07-05 15:32:55
1778
原创 【C语言学习记录18】三目运算符和逗号表达式
三目运算符(a ? b : c)三目运算符(a ? b : c)可以作为逻辑运算的载体;规则:当a的值为真时,返回b的值;否则返回c的值。三目运算符不可以当作左值使用。三目运算符返回值为一个值,而不是变量本身。小技巧:这里可以用地址来解决,因为变量的地址就是一个值。*(a < b ? &a : &b)= 3;三目运算符(a ? b : c)的返...
2019-07-03 22:24:44
237
原创 【C语言学习记录17】++和--操作符分析
++和—操作符对应两条汇编指令。1)前置: 变量自增(减)1 取变量值2)后置 取变量值 变量自增(减)1 gcc结果: vs结果:vs和gcc不同(灰色地带)结果分析:vs先加后自增。为什么结果不确定?1)C语言中只规定了++和--对应指令的相对执行程序;2)++和--对应的汇编指令不一定...
2019-07-03 22:24:02
185
原创 【C语言学习记录16】 位运算符分析
C语言中的位运算符位运算符直接对bit位进行操作,其效率最高。(比四则运算高很多)左移和右移注意点:1)左操作数必须为整数类型; char和short被隐式转换为int后进行移位操作。2)右操作数的范围必须为:[0,31]左移-1或者右移32结果不确定,因为标准C没规定其行为,编译器开发商定义。3)左移运算符<<将运算数的二进制左移;...
2019-07-03 22:23:19
446
原创 【C语言学习记录15】逻辑运算符
逻辑运算&&,||和!真的很简单么?结果为:1 0 0与的优先级高于或程序中的短路:1)||从左向右开始计算 a>当遇到为真的条件时,停止计算,整个表达式为真。 b>所有条件为假时表达式为假。2)&&从左向右开始计算 a>当遇到为假的条件时停止计算,整个表达式为假。...
2019-07-03 22:22:31
512
原创 【C语言学习记录14】单引号和双引号
C语言中的单引号用来表示字符字面量;C语言中的双引号用来表示字符串字面量; 下面的片段合法么?代码实验:运行结果为:编译有警告,运行时段错误。提示:1)字符字面量被编译为对应的ASCII码;2)字符串字面量被编译为对应的内存地址;3)printf的第一个参数被当成字符串内存地址; 4)内存的低地址空间不能再程序中任意访问。字符1的ASC...
2019-07-03 22:21:50
667
原创 【C语言学习记录13】接续符和转义符
接续符是C语言中指示编译器行为的利器。 1)接续符会将反斜杠剔除,跟在反斜杠后面的字符自动接续到前一行;2)在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格;3)接续符适合在定义宏代码块时使用。应用分析:C语言中的转义符(\)主要用于表示无回显字符,也可用于表示常规字符;无回显字符:键盘上回车键键入后,换行,如何表示换行,(\n)。当反斜杠作...
2019-07-03 22:20:59
201
原创 【C语言学习记录12】注释符号
注释是C语言最重要的工具。注释规则:1)编译器在编译过程中使用空格替换整个注释;2)字符串字面量中的//和/*…*/不代表注释符号了;3)/*……*/型注释不能被嵌套;C语言中‘\’代表换行符。注释用于阐述原因和意图而不是描述程序的运行过程。如下图:(教科书型)写注释不是晒心情,必须无二义性,起到对代码进行提示的作用,避免使用缩写!如下图(迷惑型注释...
2019-07-03 22:20:02
304
原创 【C语言学习记录11】enum,sizeof和typedef分析
enum1)enum是C语言中的一种自定义类型;2)enum值是可以根据需要自定义的整型值;3)第一个定义的enum值默认为0;4)默认情况下,enum值是在前一个定义值得基础上加1;5)enum类型的变量只能取定义时的离散值。enum的特殊意义:1)enum中定义的值是C语言中真正意义上的常量。2)在工程中enum多用于定义整型常量sizeof关键字的用法...
2019-07-03 22:19:15
288
原创 【C语言学习记录10】struct和union分析
struct分析C语言中struct可以看作变量的集合。struct的问题:空结构体占用多大内存?(没有成员变量)第一种观点:占用内存为0;(gcc编译器)第二种观点:本来为了将不同变量结合使用。若没有成员则与设计初衷违背,故错误。(BCC/VS)灰色地带,与编译器有关,实际开发中,没人这么干。程序验证,空结构体t1、t2内存为0,地址差4位,加以区分对象t1、...
2019-07-03 22:18:16
144
原创 【C语言学习记录9】const和volatile分析
const只读变量1)const修饰的变量是只读的,本质还是变量;2)const修饰的局部变量在栈上分配空间;3)const修饰的全局变量在全局数据区分配空间;4)const只在编译期有用,运行期无用;注:const修饰的变量不是真的常量,它只是告诉编译器变量不能出现在赋值符号的左边。在现代C语言编译中,修饰const全局变量将导致程序崩溃。(因为将修饰的全局变量存储于只读...
2019-07-03 22:17:28
239
原创 【C语言学习记录8】goto 和 void分析
goto副作用分析:不使用goto语句,会破坏程序结构化特征。void修饰函数返回值和参数:1)如果没有返回值,那么应该将其声明为void;2)如果函数没有参数,应该声明其参数为void;void修饰函数返回值和参数是为了表示“无”程序分析:#include<stdio.h>f(){} //这个函数有返回值,因为不写参数,默认可以接受任意的...
2019-07-01 22:27:52
169
原创 【C语言学习记录6&7】分支语句&循环语句
if语句(非此即彼)if语句用于根据条件选择不同的代码片段;else不能独立存在且总是与它最近的if相匹配;else语句后可以连接其他if语句;if语句中零值比较的注意点:bool型变量直接出现于条件中,不要进行比较; 变量和0值比较时,0值应该出现在比较符号左边;若写成a = 0;则不会报错;float型变量不能直接进行0值比较,需要定义精度;若写成a == 0;可...
2019-07-01 22:22:15
240
原创 【C语言学习记录5】变量属性
C语言中的变量可以有自己的属性;在定义变量的时候加上“属性”关键字;“属性”关键字指明变量的特有意义;语法: property type var_name示例:全局变量存储在静态存储区。什么是静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。什么是栈:在执行函数时,函数内局部...
2019-07-01 22:21:20
184
原创 【C语言学习记录4】类型转换
C语言中的数据类型可以进行转换 :1)强制类型转换2)隐式类型转换强制类型转换的语法:-(Type)var_name;变量名-(Type)value;变量值强制类型转换的结果:- 目标类型能够容纳目标值:结果不变- 目标类型不能容纳目标值:目标将产生截断。注意:不是所有的强制类型转换都能成功,当不能进行强制类型转换时,编译器将产生错误信息。32位...
2019-07-01 22:18:54
143
原创 【C语言学习记录3】浮点数的存储
十进制变二进制:整数部分:除二取余,倒序排列。 小数部分:乘2取整,顺序排列。浮点数在内存的存储方式为:符号位,指数,尾数。float与double类型的数据在计算机内部的表示法是相同的,但由于所占内存空间的不同,其分别能够表示的数值范围和精度不同。浮点数的转换:1)将浮点数转换成二进制;2)用科学计数法表示二进制浮...
2019-07-01 22:17:58
255
原创 【C语言学习记录2】有符号与无符号
有符号数的表示法数据类型的最高位用于标识数据的符号。- 最高位为1,标识这个数为负数;- 最高位为0,标识这个数为正数;计算机内部用补码标识有符号数。-正数的补码为正数本身;-负数的补码为负数的绝对值各位取反后加1;(负数的补码,符号位不取反)为什么计算机中负数要用补码来表示么?因为这样可以将减法运算化为加法运算处理。其次,若没有补码,则会有+0和-0表示两...
2019-07-01 22:16:04
398
原创 【C语言学习记录1】基本数据类型
数据类型:可以理解为固定内存大小的别名,是创建变量的模子。(汇编时代直接拿内存用)变量的本质:1)变量是一段实际连续存储空间的别名;2)程序中通过变量来申请并命名存储空间;3)通过变量的名字可以使用存储空间。关键字typedef用于为系统固有的或程序员自定义的数据类型定义一个别名。数据类型的别名通常使用大写字母,但不是强制的,只是为了与已有的数据类型相区分。例如:定...
2019-07-01 22:14:22
123
原创 【C++学习记录7】函数参数的扩展
函数参数的默认值C++中可以在函数声明时为参数提供一个默认值。当函数调用时没有提供参数的值,则使用默认值。示例如下:参数的默认值必须在函数声明中指定。问题:1)函数定义中是否可以出现参数的默认值?2)当函数声明和定义中的参数默认值不同是会发生什么?程序示例:(在C语言中编译报错,说明函数参数默认值是C++的扩展)当程序改为如下两种时,编译报错,错误提示如下:...
2018-12-25 20:20:08
146
原创 【C++学习记录6】内联函数分析
C++中const常量可以代替宏常数定义;使用内联函数替代宏代码片段。C++中标推荐使用内联函数代替宏代码片段。C++中使用inline关键字声明内联函数。内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。函数调用时,会有参数入栈、函数返回、栈变量的销毁等等的开销,而宏代码块则没有。(内联函数取两者的优点)内联函数的表现形式和普通函数是...
2018-12-25 20:13:24
378
原创 【C++学习记录5】引用的本质分析
1)引用是另一个变量的别名,也就是已经存在的一段存储空间的别名;2)引用作为变量别名而存在,因此在一些场合可以代替指针;3)引用相对于指针来说具有更好的可读性和实用性。注意:函数中的引用形参不需要进行初始化,调用的时候初始化。swap函数的实现对比: const引用(对常量的引用)1)在c++中可以声明const引用;2)const Type & na...
2018-12-25 20:10:05
135
原创 【C++学习记录4】布尔类型和引用
在C语言中,其没有具体的布尔类型,选择用int代替,0表示假,1表示真。这样子显得不是特别严谨。C++中的bool类型(bool是对C语言的类型的补充)1)C++在C语言的基本类型基础上增加了bool;2)C++中的bool可取的值只有true和false;3)理论上bool只占用一个字节。注意: true代表真值,编译器内部用1来表示; fal...
2018-12-25 20:02:12
146
原创 【C++学习记录3】const从C到C++分析
C语言中的const:1)const修饰的变量是只读的,本质还是变量。2)const修饰的局部变量在栈上分配空间。3)const修饰的全局变量在只读存储区分配空间。(修改会导致程序崩溃)4)const只在编译期有用,在运行期无用。const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边。C语言中的const使得变量具有只读属性。const将具有全...
2018-11-26 13:09:54
177
1
原创 【C++学习记录2】C到C++的升级
C++继承了所有的C特性;C++在C的基础上提供了更多的语法和特性;C++的设计目标是运行效率和开发效率(比C语言还高)的统一。(C++中++的体现)C++是C语言的进化和升级。最重要的是两个方面,其一是类型的加强(类型检查更严格),其二是天生面向对象的支持(内置天生支持面向对象软件开发方法学)。C++语言更强调语言的实用性:所有的变量都可以在需要使用时定义(C语言规定,变量必...
2018-11-26 12:50:28
114
原创 【C++学习记录1】学习C++的意义
UINX诞生之初使用汇编语言编写的。随着UINX的发展,汇编语言成为了其发展的掣肘。如何提高UINX的开发效率呢?在1971年,K&D来发出C语言,由解释型语言(B语言)变成编译型语言。C语言天生就是为了开发操作系统而存在的,其目标是高效,最终程序执行效率高。但是起初是用来编写Uinx系统,是在实践过程中逐渐完善起来的,使其没有深思熟虑的设计过程,其次是残留过多低级语言的特征。 ...
2018-11-26 12:43:37
409
2
原创 【Makefile学习记录4】变量和不同的赋值方式
既然makefile是一种脚本程序,那么就要支持程序设计语言中通用的概念和操作。所以必然 也会支持定义变量和赋值的操作。但是不同于C语言中,先声明变量类型、定义变量名字然后赋值。在makefile中不需要声明变量的类型,makefile中变量只有一种类型,只代表文本数据(字符串)。1、makefile中变量命名规则为:变量的定义和使用: 例如在makefile中定义变量CC、TARGE...
2018-04-24 17:37:53
445
原创 【makefile学习记录3】伪目标的引入
通过前两课的学习,我们知道makefile中的基本组成的元素是规则。那么makefile中的目标究竟是什么呢?在默认情况下:make认为目标对应着一个文件;make比较目标文件和依赖文件的新旧关系,决定是否执行命令;make以文件处理作为第一优先级。make的诞生就是为了自动管理和编译一个项目中的C程序文件。当我们有以下makefile文件时:hello.out all : fun.o main....
2018-04-18 17:17:25
121
原创 【makefile学习记录2】初识makefile结构
1、makefile的意义及定义:用于定义源文件间的依赖关系(通过自己特定的语法),通过这种依赖关系来说明如何编译各个源文件并生成可执行文件。依赖的定义:(①定义依赖规则时,依赖条件可以省略②可以把command1不用,此时分号可去掉)targets : prerequisite ; command1'\t' command2makefile中的元素含义: targets: 通常是需要生成...
2018-04-09 17:38:09
152
原创 【makefile学习记录1】认识make和makefile
1、什么是make?为什么需要make?make本质是一个应用程序。用来解析源程序之间的依赖关系 很多源码程序的文件是非常多的,而且那些文件之间大多是有依赖关系的,make就是可以解析这些依赖的关系。根据依赖关系自动维护编译工作 因为在我们编译大型源码的时候,需要编译很多的程序,加入我们的程序在编译到一大半的时候,有一个程序报错停止编译了,那么我们就需要改错,然后重新make...
2018-04-09 11:00:28
184
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人