C语言深度解析
C语言深度解析
浅若如初
行则将至
展开
-
动态内存分配
【代码】动态内存分配。原创 2023-04-14 14:36:14 · 155 阅读 · 1 评论 -
程序中的三国天下
【代码】程序中的三国天下。原创 2023-04-13 15:55:56 · 165 阅读 · 0 评论 -
程序的内存布局
【代码】程序的内存布局。原创 2023-04-12 14:45:53 · 80 阅读 · 0 评论 -
指针阅读技巧分析
【代码】指针阅读技巧分析。原创 2023-03-29 20:59:32 · 57 阅读 · 0 评论 -
指针阅读技巧分析
【代码】指针阅读技巧分析。原创 2023-03-28 17:55:37 · 57 阅读 · 0 评论 -
指针和数组分析
【代码】指针和数组分析。原创 2023-03-27 22:47:44 · 51 阅读 · 0 评论 -
数组的本质分析
【代码】数组的本质分析。原创 2023-03-27 22:49:03 · 56 阅读 · 0 评论 -
#pragma 使用分析
pragma 用于指示编译器完成一些特定的动作#pragma 所定义的很多指示字是编译器特有的#pragma 在不同的编译器间是不可移植的预处理器将忽略它不认识的#pragma指令不同的编译器可能以不同的方式解释同一条3pragma指令一般用法: #pragmaticparameter 注:不同的parameter参数语法和意义各不相同。原创 2023-03-27 22:48:28 · 116 阅读 · 0 评论 -
#error实验分析
【代码】#error实验分析。原创 2023-03-27 22:44:34 · 44 阅读 · 0 评论 -
函数与指针分析
【代码】函数与指针分析。原创 2023-03-27 22:38:25 · 42 阅读 · 0 评论 -
多维数组和多维指针
【代码】多维数组和多维指针。原创 2023-03-27 22:39:46 · 56 阅读 · 0 评论 -
main函数与命令行参数
【代码】main函数与命令行参数。原创 2023-03-27 22:36:59 · 92 阅读 · 0 评论 -
# 和 ## 操作符使用分析
【代码】# 和 ## 操作符使用分析。原创 2023-03-21 09:34:52 · 196 阅读 · 0 评论 -
编译链接过程简介
【代码】编译链接过程简介。原创 2023-03-19 19:58:32 · 68 阅读 · 0 评论 -
条件编译使用分析
【代码】条件编译使用分析。原创 2023-03-19 19:41:12 · 65 阅读 · 0 评论 -
宏定义与使用分析
define 是预处理器处理的单元实体之一#define 定义的宏可以出现在程序的任意位置#define 定义之后的代码都可以使用这个宏,也就是说宏定义没有作用域的限制#define 定义的宏常量可以直接使用#define 定义的宏常量本质为字面量下面定义的定义正确吗?test.c"答案:1和2和4是正确的,4用接续符将两行文本合起来效果同2,但是3的话宏替换后不是一个合法的字符串宏表达式被预处理器处理,编译器不知道宏表达式的存在宏表达式用"实参"完全替代形参,不进行任何运算。原创 2023-03-16 21:59:40 · 85 阅读 · 0 评论 -
编译过程简介
【代码】编译过程简介。原创 2023-03-15 22:05:37 · 62 阅读 · 0 评论 -
C(18)三目运算符和逗号表达式
文章目录1. 三目运算符2. 逗号表达式3. 总结1. 三目运算符三目运算符的返回类型是一个左值a?b:c 的返回类型通过隐式转换返回 b 和 c 中的较高类型,当 b 和 c不能隐式转换到同一类型时将编译报错EG:#include <stdio.h>int main(int argc, char *argv[]){ int a = 1; int b = 2; // (a < b ? a : b) = 3; // 报错,三目运算符返回的是左值,可以使用 *(a原创 2020-07-13 20:51:24 · 197 阅读 · 0 评论 -
C(16)位运算符分析
文章目录1. C语言中的位运算符2. 左移与右移3. 位运算与逻辑运算的区别4. 总结1. C语言中的位运算符位运算符名称&按位或|按位与^按位异或~取反<<左移>>右移2. 左移与右移做操作数必须为整数类型,char 和 short 被隐式转换为int后进行位操作右操作数的范围必须时 [0,31] ,超过这个范围是未定义行为,由编译器厂商决定左移运算符 << 将运算数的二进制位左移,原创 2020-07-13 17:36:41 · 1205 阅读 · 0 评论 -
C(15)逻辑运算符分析
文章目录1. 逻辑与和逻辑或2. 非运算符3. 总结1. 逻辑与和逻辑或|| 从左向右开始计算,当遇到为真的条件时停止计算,整个表示式为真,所有条件为假时才为假&& 从左向右开始计算,当遇到为假的条件时停止计算,整个表达式为假,所有条件为真时表达式才为真逻辑表达式中,&&比|| 具有更高的优先级,++i || ++j && ++k ==> (++i) || (++j && ++k)EG:#include <stdio原创 2020-07-02 16:18:27 · 138 阅读 · 0 评论 -
C(14)单引号和双引号
文章目录1. 单引号和双引号1.1 单引号和双引号的概念1.2 补充知识1.3 示例11.4 示例22. 总结1. 单引号和双引号1.1 单引号和双引号的概念C语言中的单引号用来表示字符字面量C语言中的双引号用来表示字符串字面量1.2 补充知识字符字面量被编译为对应的ASCII码字符串字面量被编译为对应的内存地址printf的第一个参数被当作字符串内存地址内存的低地址空间不能在程序中随意访问1.3 示例1#include <stdio.h>int main()原创 2020-06-25 10:39:28 · 248 阅读 · 0 评论 -
C(13)接续符和转义符
文章目录1. 接续符2. 转义符3. 总结1. 接续符编译器会将反斜杠提出,跟在反斜杠后面的字符自动接续到前一行在接续单词时,反斜杠之后不能有空格,反斜杠的下一行也不能有空格接续符适合在定义宏代码块的时使用EG:#include <stdio.h>#define SWAP(a,b) \{ \ int temp = a; \ a = b; \ b = temp;原创 2020-06-25 09:20:09 · 166 阅读 · 0 评论 -
C(12)注释符号
文章目录1. 注释讲解一2. 注释讲解二3. 总结1. 注释讲解一编译器在编译的过程中使用空格替换整个注释字符串字面量中的 // 和 /*...*/ 不代表注释符号/*...*/ 型注释不能被嵌套EG:#include <stdio.h>int main(){ int/*...*/i; char* s = "abcdefgh //hijklmn"; //Is it a \ valid comment?原创 2020-06-24 20:30:08 · 238 阅读 · 0 评论 -
C11(enum, sizeof, typedef 分析)
文章目录1. 枚举类型 enum2. sizeof 关键字3. typedef 关键字4. 总结1. 枚举类型 enumenum 是C语言中的一种自定义类型enum 值是可以根据需要自定义的整型值第一个定义的 enum 值默认是0默认情况下的 enum 值是在前一个定义值的基础上加1enum 类型的变量只能取定义时的离散值(虽然取其它值也没报错,但是没有意义)enum 中定义的值时 C 语言中真正意义上的常量EG:#include <stdio.h>enum{原创 2020-06-24 12:03:34 · 641 阅读 · 0 评论 -
C(10)struct 和 union 分析
文章目录1. struct 关键字1.1 struct 空结构体占用的内存1.2 柔性数组2. union 关键字3. 总结1. struct 关键字1.1 struct 空结构体占用的内存#include <stdio.h>struct TS{};int main(){ struct TS t1; struct TS t2; printf("sizeof(struct TS) = %d\n", sizeof(struct TS));原创 2020-06-22 12:38:12 · 229 阅读 · 0 评论 -
C09(const 和 volatile 分析)
文章目录1. const 只读变量1.1 标准C语言1.2 现代编译器1.3 编程实验2. const 修饰函数参数和返回值3. volatile关键字4. 总结1. const 只读变量1.1 标准C语言const 修饰的变量是只读的,本质还是变量const 修饰的局部变量在栈上分配空间const 修饰的全局变量在全局数据区分配空间const 只在编译期间有效,在运行期间无效const 修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边1.2 现代编译器对于局部原创 2020-06-22 12:37:12 · 278 阅读 · 0 评论 -
C08(goto 和 void 分析)
文章目录1. goto关键字2. void 关键字2.1 void 修饰函数返回值和参数2.2 C语言不存在void变量2.3 void 指针的含义3. 总结1. goto关键字在如今的项目经验中禁止使用 gotogoto 语句的使用给程序的可读性带来了麻烦,不方便维护,并且使用的时候很容易出现错误2. void 关键字2.1 void 修饰函数返回值和参数eg1:#include <stdio.h>func(){}int main(int argc, char原创 2020-06-21 11:57:15 · 324 阅读 · 0 评论 -
C01(基本数据类型)
文章目录1. 什么是数据类型1.1 什么是数据类型1.2 为什么需要数据类型2. 什么是变量3. 数据类型与变量的关系4. 自定义数据类型与创建变量5. 总结1. 什么是数据类型1.1 什么是数据类型数据类型可以理解为固定内存大小的别名数据类型是创建变量的模子1.2 为什么需要数据类型在引入数据类型的概念后,方便程序员对内存的操作,就不需要程序员直接对内存进行访问2. 什么是变量...原创 2020-03-26 17:11:12 · 1299 阅读 · 0 评论 -
C06(分支语句)
文章目录1. if 语句分析1.1 if语句分析1.2 if 语句中零值比较的注意点2. switch 语句的分析3. 代码分析3.1 if 与switch语句使用代码案例3.2 if语句与switch语句的互换4. 总结1. if 语句分析1.1 if语句分析if 语句根据条件选择执行语句else 不能独立存在,且总是与距离它最近的if匹配else 语句可以连接其他if语句1....原创 2020-03-26 16:02:44 · 383 阅读 · 0 评论 -
C05(变量属性)
文章目录1. C语言的变量属性2. auto关键字3. register关键字4. static 关键字5. 代码分析5.1 auto ,register,static关键字5.2 extern关键字6. 总结6. 总结1. C语言的变量属性C语言中的变量可以有自己的属性在定义变量的时候可以加上“属性”关键字属性关键字,指明变量的特有意义//语法property type var_...原创 2020-03-26 15:09:12 · 723 阅读 · 0 评论 -
C04(类型转换)
文章目录1. C语言中的数据类型转换2. 强制类型转换3. 隐式类型转换4. 总结4. 总结1. C语言中的数据类型转换C语言中,可以进行数据类型转换。有以下两种数据类型转换:强制类型数据转换隐式类型数据转换如下图:2. 强制类型转换强制类型转换的语法为:(Type)var_name; //对某一个变量名进行强制转换(Type)value; // 对某一个值进行强制转换...原创 2020-03-24 18:13:01 · 857 阅读 · 0 评论 -
C03(浮点数的秘密)
文章目录1. 浮点数在内存中的存储方式2. 浮点数的转换步骤3. 浮点数的转换实际例子分析4. int与float类型的范围的比较5. 总结5. 总结1. 浮点数在内存中的存储方式浮点数在内存中的存储方式为:符号位+指数+尾数,对于float与double类型的存储方式,如下图所示:float与double类型的数据在计算机内部的表示法是相同的,但是由于所占存储空间的不同,其分别能表示的数...原创 2020-03-24 18:09:58 · 931 阅读 · 0 评论 -
C02(有符号与无符号)
文章目录1 计算机中的符号位2. 有符号数的表示法3.无符号数的表示法4. signed 和 unsigned5. 当有符号数与无符号数进行运算6. 错误的使用了unsigned6. 总结1 计算机中的符号位C语言中,数据类型的最高位,用于标识数据的符号。最高位为1,表明这个数为负数最高位为0,表明这个数为正数#include <stdio.h>int main()...原创 2020-03-24 18:06:43 · 1114 阅读 · 0 评论