合集-C语法剖析
摘要:C总结与剖析:关键字篇 目录C总结与剖析:关键字篇变量1.变量:内存上的某个位置开辟的空间2.变量的初始化3.为什么要有变量4.局部变量与全局变量5.变量的大小由类型决定6.任何一个变量,内存赋值都是从低地址开始往高地址1.1 关键字auto1.2 关键字register什么样的变量可以采用regi
阅读全文
摘要:目录位段位段的介绍位段使用示例:位段的内存分配Example内存分配解析:位段的跨平台问题 位段 位段的介绍 位段(二进制位):就是按位存储 位段(bit-field)是C语言中的一种特殊数据类型,它允许将一个字节分成几个部分,并为每个部分指定特定的位数,以便在内存中存储和访问这些部分。 其中位段相
阅读全文
摘要:
目录数组和指针多维数组的物理结构证明数组a和&a不同数组与指针的差别之一什么时候数组名表示整个数组?数组训练理解指针与数组的题所有的数组,都可以看成一维数组.所有的数组传参,最终都会降维成一维数组函数函数的地址函数的规范内存管理malloc返回给用户的只有申请内存的起始地址,那free是如何准确释放
阅读全文

摘要:预处理 目录预处理一、宏定义数值宏常量字符串宏常量用define宏定义注释符号?程序的编译过程预处理中宏替换和去注释谁先谁后?如何写一个更可靠的宏函数do-while-zero结构do-while-zero的评价宏定义中的空格宏只能在main函数上面定义吗?宏的作用范围#undef宏替换是在函数调用
阅读全文
摘要:目录负数"取模"基本概念修正定义取整规则决定商的值取模和取余不一样. 负数"取模" 基本概念 如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足 a = q*d + r,且0 <= r < d。其中,q 被称为商,r 被称为余数。 //对应代码 int main() { i
阅读全文
摘要:目录C语言的四种取整方式:零向取整trunc函数(C99)trunc的使用地板取整floor函数的使用向上取整ceil函数的使用四舍五入round函数(C99)round函数的使用四种取整方式演示 C语言的四种取整方式: 零向取整 如图: 可以发现C语言a和b的取整方式都不是四舍五入,而是直接舍弃小
阅读全文
摘要:目录条件编译 - 代码裁剪的工具为何要有条件编译条件编译都在那些地方用?见一见条件编译的代码宏是否被定义 vs 宏是否为真or假编译器也能够自动帮你加上宏GCCVS2023-VS2019#ifdef/#ifndef#if注意事项让#if和#ifdef/#ifndef完全一样条件编译也支持嵌套一个使用
阅读全文
摘要:目录变量程序的本质:二进制文件1.变量:内存上的某个位置开辟的空间2.变量的初始化:3.为什么要有变量4.局部变量与全局变量5.变量的大小由类型决定6.任何一个变量,内存赋值都是从低地址开始往高地址1.1 关键字auto1.2 关键字register什么样的变量可以采用register? 变量 程序
阅读全文
摘要:目录if-else组合if的执行顺序操作符的执行顺序测试方法C语言的布尔类型switch case组合(补充) 屏蔽警告的方法在case中执行多条语句,建议case后都带上花括号.多个case执行同样语句do、while、for循环的基本结构continue跳转的位置循环设计的思想推荐推荐使用for
阅读全文
摘要:目录宏定义数值宏常量字符串宏常量用define宏定义注释符号?程序的编译过程预处理中宏替换和去注释谁先谁后?如何写一个可靠的宏函数do-while-zero结构do-while-zero的评价宏定义中的空格宏只能在main函数上面定义吗?宏的作用范围#undef宏替换是在函数调用之前进行.块中进行#
阅读全文
摘要:目录浮点数与"零值"精度损失:验证浮点数的差值是否存在精度损失浮点数直接比较验证如何进行浮点数比较浮点数与"零值"比较null 浮点数与"零值" 精度损失: 浮点值与实际值不等,可能偏大可能偏小,都属于精度损失 验证浮点数是否存在精度损失 验证浮点数的差值是否存在精度损失 浮点数直接比较验证 结论:
阅读全文
摘要:目录++(--)后置的++(--)真的是先使用,后自增吗?后置++和前置++的差别复杂表达式++i+++i+++i贪心法编译器的贪心规则不是保证一定正确的规则赋值的原理 ++(--) 后置的++(--)真的是先使用,后自增吗? 概念:前置++是先自增,后使用; 后置++是先使用,后自增. 下面从汇编
阅读全文
摘要:目录typedeftypedef功能简化类型声明typedef与宏的区别typedef的用法注意不要过度使用typedef为什么typedef属于存储类型关键字 typedef 历史的误会-typedef也许应该是typerename,typedef就是用来给类型重命名的 typedef功能 typ
阅读全文
摘要:目录位运算位运算和逻辑运算区别位运算的几点注意异或的运算规则异或的经典问题:两数交换位操作建议使用宏定义好后使用位运算整型提升问题左移和右移概念移位运算容易误解成移位赋值 位运算 位运算和逻辑运算区别 位运算是一位对应一位的对所有位逐一进行运算(逐比特位进行运算).逻辑运算是以计算表达式的真假为主进
阅读全文
摘要:目录类型关键字sizeof如何理解强制类型转化不同类型的0null字符设备(补充) char有有符号和无符号两种类型,字符是无符号类型.(补充) getchar的返回值为什么是int键盘输入的内容,以及往显示器中打印的内容,都是字符 --> 键盘/显示器称为字符设备 类型 C语言为何有类型? 让我们
阅读全文
摘要:目录举例一些的宏和预处理指令C99引入的特性 VA_ARGS__##__VA_ARGS__说明:#line#error#pragmaMessage参数#warning#和##前置:相邻字符串具有自动连接特性#运算符#运算符的功能:在宏定义中,将宏参数转化成字符串用法举例:使用场景:##运算符功能:用
阅读全文