![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 95
mChenys
这个作者很懒,什么都没留下…
展开
-
Linux进程操作
目录一、进程和程序相关概念1.1 进程的状态转化二、环境变量2.1 getenv/setenv/unsetenv函数三、创建进程3.1 fork函数3.2 getpid/getppid函数3.3 创建n个子进程3.4 循环创建子进程并控制顺序四、进程的控制命令五、父子进程共享内容的操作原则六、exec族函数介绍6.1 execl函数6.2 execlp七、孤儿进程和僵尸进程7.1 孤儿进程7.2 僵尸进程八、进程回收8.1 wait函数8.2 waitpid8.3 用wait回收多个子进程8.4 用wait原创 2022-03-15 20:46:43 · 1504 阅读 · 1 评论 -
Linux文件操作
目录一、系统api与库函数的关系二、open和close函数介绍2.1 open方法介绍2.2 close方法介绍三、open/create函数创建文件时的权限设置四、read和write函数的介绍和使用4.1 read函数介绍4.2 write函数介绍4.3 如何使用五、lseek函数的介绍和使用5.1 介绍5.2 如何使用六、阻塞和非阻塞相关概念6.1 fcnl函数七、Linux最大文件打开数7.1 修改单个进程的最大文件句柄7.2 修改系统所有进程的文件局柄八、stat函数介绍和使用8.1 通过sta原创 2022-03-11 20:36:51 · 3387 阅读 · 1 评论 -
C开发编译与调试
目录一、gcc编译流程1.1 预处理阶段1.2 预编译阶段1.3 汇编阶段(最耗时)一、gcc编译流程1.1 预处理阶段宏定义展开,宏定义替换,展开include的文件gcc -E -o hello.i hello.c例如源文件hello.c内容如下:#include <stdio.h>int main(){ printf("hello test"); return 0;}经过预处理后生成的hello.i内容如下:# 1 "hello.c"# 1 "<bu原创 2022-03-08 22:28:22 · 1065 阅读 · 0 评论 -
C数据结构
目录一、动态数组二、单向链表2.1 链表逆序三、栈3.1 顺序存储一、动态数组所谓动态数组就是可以自动扩容的数组, 例如:#include <stdio.h>#include <stdlib.h>#include <string.h>//动态数组struct DynamicArray{ //数组存储元素的空间首地址,存放的都是地址void* void **addr; //最大容量 int capacity; //实原创 2022-02-26 23:16:31 · 958 阅读 · 0 评论 -
C基础补充
目录1.结构体使用typedef起别名的2种方式2.void类型和void*类型的区别3.struct成员不允许在定义时初始化4.sizeof操作符的注意事项5.指针步长的操作6.操作已回收的栈变量地址的问题7.形参不能修改实参的问题8.全局变量或者函数必须要先声明再使用9.const全局变量和const局部变量的区别10.宏函数与普通函数的区别11.正确认识字符串及数组的首地址12.获取结构体成员的地址偏移量13.字符串拷贝的几种方式1.结构体使用typedef起别名的2种方式typedef起别名的作原创 2022-02-17 21:11:59 · 528 阅读 · 0 评论 -
C基础(七)文件操作
目录一、文件的打开和关闭1.1 fopen函数1.2 fclose函数二、读取和写入字符2.1 getc函数2.2 putc函数2.3 案例-实现控制台输入文件名创建文件并支持写入功能2.4 案例-实现控制台输入文件名读取该文件的内容2.5 案例-实现echo的功能2.6 案例-实现文件拷贝的命令2.7 实现文件加解密2.8 EOF与feof函数文件结尾三、读取和写入一行文本3.1 fprintf和fscanf函数3.2 案例-将用户控制台输入的内容打印到文件中3.3 fgets和fputs函数3.4 案例原创 2022-02-14 10:57:53 · 630 阅读 · 0 评论 -
C基础(六)结构体
目录一、结构体struct的定义和.操作符的使用二、 结构体的创建和初始化三、结构体的内存对齐模式3.1结构体强转其他类型四、指定结构体元素的位字段(bit)五、结构数组5.1 结构体数组的冒泡排序六、结构体嵌套七、结构体的赋值八、箭头操作符 ->的使用九、指向结构体数组的指针十、结构体中的数组成员和指针成员十一、在堆中创建结构体十二、结构体作为函数的参数12.1将结构体作为函数的参数12.2 将结构指针作为函数参数十三、案例-使用结构体动态接收控制台输入参数十四、思考:结构体的成员到底在栈还是堆?原创 2022-02-10 16:20:53 · 2317 阅读 · 0 评论 -
C基础(五)作用域和内存管理
目录一、作用域1.1 作用域和生命周期二、内存区域划分三、堆内存的分配和释放3.1 malloc分配堆内存3.2 free释放堆内存3.3 思考:解决函数返回值是指针的问题方案一: 返回一个在堆内存分配的地址指针变量方案二: 在函数调用处定义自变量3.4 思考:局部静态变量和常量所指向的地址的值出了作用域还能访问吗?3.5 案例:使用堆内存解决strcat追加字符串无法提前预知内存大小的申请问题3.6 calloc分配指定大小的堆内存3.7 realloc重新分配新的堆内存3.8 正确处理函数内分配堆内存的原创 2022-02-09 18:24:22 · 842 阅读 · 0 评论 -
C基础(四)指针的使用
目录一、一级指针1.1 指针变量的定义1.2 &取地址运算符二、二级和多级指针一、一级指针指针也是一个变量,指针存放的内容是一个内存地址,该地址指向一块内存空间。1.1 指针变量的定义一级指针变量的数据类型会在基本数据了类型之后多了一个*号,指针变量只能存放内存地址(一个16进制的数),不能将一个基本数据类型直接赋值给一个指针变量。如果要取出一级指针变量指向的内存地址所对应的值的话,可以通过在指针变量前加一个*号来获取int *p;//表示定义一个指针变量p, 类型是int *;*p;原创 2022-01-28 20:19:57 · 1099 阅读 · 0 评论 -
C基础(三)函数的使用
目录一、库函数的使用1.1 随机数rand与srand1.2 scanf函数1.3 gets函数1.4 fgets函数1.5 puts函数1.6 strlen函数1.7 strcat函数和strncat函数1.8 strcmp和strncmp1.9 strcpy和strncpy1.10 sprintf函数1.11 sscanf函数1.12 strchr和strstr函数1.13 strtok函数1.14 atoi和atof,atoll函数二、自定义函数2.1 函数的形参与实参2.2函数的返回类型与返回值2.原创 2022-01-27 22:58:51 · 552 阅读 · 0 评论 -
C基础(二)数组和字符串的使用
目录一、一维数组1.1 数组的定义1.2 数组的初始化1.3 获取数组的长度1.4 案例-查找数组最大值1.5 查找数组第二大元素1.6 数组逆置1. 7 冒泡排序二、二维数组2.1 二维数组的定义2.2 二维数组的初始化和取值三、三维数组一、一维数组数组在内存中就是一段连续的空间,每个元素的类型是一样的1.1 数组的定义数组下标从0开始,数组的名字是一个常量,如果直接输出数组的名字得到的结果就是数组中第一个元素的地址int array[10];//定义一个一维数组,名字叫array,一共有10个原创 2022-01-25 22:47:54 · 478 阅读 · 0 评论 -
C基础(一)数据类型、进制、运算符、语句
目录一、常量1.1 宏常量1.2 const常量1.3 字符串常量1.4 整数常量二、十进制与二进制2.1 十进制,二进制,八进制,十六进制的关系2.2 二进制与八进制和16进制的关系2.3 十进制数转换为2进制的技巧三、原码反码与补码3.1 原码推算补码的方式3.2 补码推算原码的方式四、sizeof关键字的使用4.1 有符号和无符号的区别4.2 整数的溢出五、大端对齐与小端对齐六、char类型6.1 格式说明符中的类型七、浮点类型7.1 小数的四舍五入八、运算符8.1 ++和--运算符8.2 逗号运算符原创 2022-01-24 23:18:27 · 613 阅读 · 0 评论