C语言学习记录
haibing_x
这个作者很懒,什么都没留下…
展开
-
【C语言学习记录1】基本数据类型
数据类型:可以理解为固定内存大小的别名,是创建变量的模子。(汇编时代直接拿内存用)变量的本质:1)变量是一段实际连续存储空间的别名;2)程序中通过变量来申请并命名存储空间;3)通过变量的名字可以使用存储空间。关键字typedef用于为系统固有的或程序员自定义的数据类型定义一个别名。数据类型的别名通常使用大写字母,但不是强制的,只是为了与已有的数据类型相区分。例如:定...原创 2019-07-01 22:14:22 · 117 阅读 · 0 评论 -
【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 · 195 阅读 · 0 评论 -
【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 · 209 阅读 · 0 评论 -
【C语言学习记录17】++和--操作符分析
++和—操作符对应两条汇编指令。1)前置: 变量自增(减)1 取变量值2)后置 取变量值 变量自增(减)1 gcc结果: vs结果:vs和gcc不同(灰色地带)结果分析:vs先加后自增。为什么结果不确定?1)C语言中只规定了++和--对应指令的相对执行程序;2)++和--对应的汇编指令不一定...原创 2019-07-03 22:24:02 · 177 阅读 · 0 评论 -
【C语言学习记录16】 位运算符分析
C语言中的位运算符位运算符直接对bit位进行操作,其效率最高。(比四则运算高很多)左移和右移注意点:1)左操作数必须为整数类型; char和short被隐式转换为int后进行移位操作。2)右操作数的范围必须为:[0,31]左移-1或者右移32结果不确定,因为标准C没规定其行为,编译器开发商定义。3)左移运算符<<将运算数的二进制左移;...原创 2019-07-03 22:23:19 · 440 阅读 · 0 评论 -
【C语言学习记录15】逻辑运算符
逻辑运算&&,||和!真的很简单么?结果为:1 0 0与的优先级高于或程序中的短路:1)||从左向右开始计算 a>当遇到为真的条件时,停止计算,整个表达式为真。 b>所有条件为假时表达式为假。2)&&从左向右开始计算 a>当遇到为假的条件时停止计算,整个表达式为假。...原创 2019-07-03 22:22:31 · 491 阅读 · 0 评论 -
【C语言学习记录14】单引号和双引号
C语言中的单引号用来表示字符字面量;C语言中的双引号用来表示字符串字面量; 下面的片段合法么?代码实验:运行结果为:编译有警告,运行时段错误。提示:1)字符字面量被编译为对应的ASCII码;2)字符串字面量被编译为对应的内存地址;3)printf的第一个参数被当成字符串内存地址; 4)内存的低地址空间不能再程序中任意访问。字符1的ASC...原创 2019-07-03 22:21:50 · 631 阅读 · 0 评论 -
【C语言学习记录13】接续符和转义符
接续符是C语言中指示编译器行为的利器。 1)接续符会将反斜杠剔除,跟在反斜杠后面的字符自动接续到前一行;2)在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格;3)接续符适合在定义宏代码块时使用。应用分析:C语言中的转义符(\)主要用于表示无回显字符,也可用于表示常规字符;无回显字符:键盘上回车键键入后,换行,如何表示换行,(\n)。当反斜杠作...原创 2019-07-03 22:20:59 · 175 阅读 · 0 评论 -
【C语言学习记录12】注释符号
注释是C语言最重要的工具。注释规则:1)编译器在编译过程中使用空格替换整个注释;2)字符串字面量中的//和/*…*/不代表注释符号了;3)/*……*/型注释不能被嵌套;C语言中‘\’代表换行符。注释用于阐述原因和意图而不是描述程序的运行过程。如下图:(教科书型)写注释不是晒心情,必须无二义性,起到对代码进行提示的作用,避免使用缩写!如下图(迷惑型注释...原创 2019-07-03 22:20:02 · 299 阅读 · 0 评论 -
【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 · 281 阅读 · 0 评论 -
【C语言学习记录10】struct和union分析
struct分析C语言中struct可以看作变量的集合。struct的问题:空结构体占用多大内存?(没有成员变量)第一种观点:占用内存为0;(gcc编译器)第二种观点:本来为了将不同变量结合使用。若没有成员则与设计初衷违背,故错误。(BCC/VS)灰色地带,与编译器有关,实际开发中,没人这么干。程序验证,空结构体t1、t2内存为0,地址差4位,加以区分对象t1、...原创 2019-07-03 22:18:16 · 137 阅读 · 0 评论 -
【C语言学习记录9】const和volatile分析
const只读变量1)const修饰的变量是只读的,本质还是变量;2)const修饰的局部变量在栈上分配空间;3)const修饰的全局变量在全局数据区分配空间;4)const只在编译期有用,运行期无用;注:const修饰的变量不是真的常量,它只是告诉编译器变量不能出现在赋值符号的左边。在现代C语言编译中,修饰const全局变量将导致程序崩溃。(因为将修饰的全局变量存储于只读...原创 2019-07-03 22:17:28 · 233 阅读 · 0 评论 -
【C语言学习记录8】goto 和 void分析
goto副作用分析:不使用goto语句,会破坏程序结构化特征。void修饰函数返回值和参数:1)如果没有返回值,那么应该将其声明为void;2)如果函数没有参数,应该声明其参数为void;void修饰函数返回值和参数是为了表示“无”程序分析:#include<stdio.h>f(){} //这个函数有返回值,因为不写参数,默认可以接受任意的...原创 2019-07-01 22:27:52 · 145 阅读 · 0 评论 -
【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 · 209 阅读 · 0 评论 -
【C语言学习记录5】变量属性
C语言中的变量可以有自己的属性;在定义变量的时候加上“属性”关键字;“属性”关键字指明变量的特有意义;语法: property type var_name示例:全局变量存储在静态存储区。什么是静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。什么是栈:在执行函数时,函数内局部...原创 2019-07-01 22:21:20 · 161 阅读 · 0 评论 -
【C语言学习记录4】类型转换
C语言中的数据类型可以进行转换 :1)强制类型转换2)隐式类型转换强制类型转换的语法:-(Type)var_name;变量名-(Type)value;变量值强制类型转换的结果:- 目标类型能够容纳目标值:结果不变- 目标类型不能容纳目标值:目标将产生截断。注意:不是所有的强制类型转换都能成功,当不能进行强制类型转换时,编译器将产生错误信息。32位...原创 2019-07-01 22:18:54 · 122 阅读 · 0 评论 -
【C语言学习记录3】浮点数的存储
十进制变二进制:整数部分:除二取余,倒序排列。 小数部分:乘2取整,顺序排列。浮点数在内存的存储方式为:符号位,指数,尾数。float与double类型的数据在计算机内部的表示法是相同的,但由于所占内存空间的不同,其分别能够表示的数值范围和精度不同。浮点数的转换:1)将浮点数转换成二进制;2)用科学计数法表示二进制浮...原创 2019-07-01 22:17:58 · 246 阅读 · 0 评论 -
【C语言学习记录2】有符号与无符号
有符号数的表示法数据类型的最高位用于标识数据的符号。- 最高位为1,标识这个数为负数;- 最高位为0,标识这个数为正数;计算机内部用补码标识有符号数。-正数的补码为正数本身;-负数的补码为负数的绝对值各位取反后加1;(负数的补码,符号位不取反)为什么计算机中负数要用补码来表示么?因为这样可以将减法运算化为加法运算处理。其次,若没有补码,则会有+0和-0表示两...原创 2019-07-01 22:16:04 · 372 阅读 · 0 评论 -
【C语言学习记录20】链接过程
问题工程中的每个C语言源文件被编译后生产目标文件,这些文件如何生成最终的可执行程序?链接器的意义:链接器的主要作用是把各个模块之间相互引用的部分处理好,使得模块之间能够争取的衔接。静态链接由链接器在链接时将库的内容直接加入到可执行程序中。在Linux静态库下的创建和使用:1)编译静态库源码:gcc –c lib.c –o lib.o (目标文件)2)生成...原创 2019-07-05 15:33:22 · 305 阅读 · 0 评论