03 2023 档案

摘要:链表的概述 链表是由一个一个的节点组成,节点没有名字,每个节点从堆区空间动态申请,节点间是非连续的(物理上),但是每个节点通过指针域保存下一个节点的位置,达到逻辑上的连续 数组和链表的区别 静态数组:必须事先确认数组元素的个数(过多浪费,过小溢出),插入删除数据效率低(需要移动大量数据),遍历元素效 阅读全文
posted @ 2023-03-20 11:39 牙齿凤 阅读(27) 评论(0) 推荐(0) 编辑
摘要:rewind:复位文件指针流 void rewind(FILE *stream) ftell:返回文件流指针距离文件首部的字节数 long ftell(FILE *stream) fseek:文件流指针定位 int fseek(FILE *stream, long offset, int whenc 阅读全文
posted @ 2023-03-17 17:12 牙齿凤 阅读(17) 评论(0) 推荐(0) 编辑
摘要:文件的操作步骤:打开,读写,关闭 fopen:打开文件 FILE *fopen(const char *path, const char *mode) path:文件的路径 mode:打开文件的方式 返回值 成功:返回打开文件的指针 失败:NULL 文件的打开方式(mode) r:只读的方式打开 w 阅读全文
posted @ 2023-03-17 16:43 牙齿凤 阅读(48) 评论(0) 推荐(0) 编辑
摘要:所有操作文件的库函数,都需要借助文件指针操作文件 每一个进程默认打开的3个文件指针 stdin:标准输入,默认为当前终端(键盘),我们使用的scanf、getchar函数默认从此终端获得数据 stdout:标准输出,默认为当前终端(屏幕),我们使用的printf、puts函数默认输出信息到此终端 s 阅读全文
posted @ 2023-03-17 09:30 牙齿凤 阅读(73) 评论(0) 推荐(0) 编辑
摘要:文件分类(存储介质) 磁盘文件:文件的数据存放在磁盘上(音视频、图片文件、文档文件) 设备文件:通过系统将外部设备抽象成文件 文件分类(存储方式) 任何磁盘文件在物理上都是二进制存储 逻辑上,磁盘文件分为二进制文件和文本文件 文本文件:基于字符编码的文件 二进制文件:基于值编码的文件 文本文件 基于 阅读全文
posted @ 2023-03-17 09:17 牙齿凤 阅读(278) 评论(0) 推荐(0) 编辑
摘要:枚举 将枚举变量要赋的值一一列举出来。例如 enum COLOR{RED, BLACK, GREEN, BLUE, YELLOW}; 修改枚举值 阅读全文
posted @ 2023-03-16 11:19 牙齿凤 阅读(8) 评论(0) 推荐(0) 编辑
摘要:共用体 所有成员共享同一块空间。例如: 成员a、b、c共享同一块空间,空间大小由最大的成员空间决定 成员a、b、c共享同一块空间,但是每个成员能操作的空间范围是由成员自身类型长度决定 阅读全文
posted @ 2023-03-16 11:10 牙齿凤 阅读(23) 评论(0) 推荐(0) 编辑
摘要:结构体的位域 在结构体中,以位为单位的成员,称为位域 上图中,a的类型是 unsigned int,a的大小只占2位二进制位 没有被 非位域 隔开的位域,叫相邻位域 相邻位域可以压缩,但是压缩的位数不能超过自身类型的大小 不要对位域取地址 对位域赋值不要超过位域本身位的宽度 另起一个存储单元 无意义 阅读全文
posted @ 2023-03-16 10:59 牙齿凤 阅读(79) 评论(0) 推荐(0) 编辑
摘要:结构体的对齐规则 自动对齐规则 1、确定分配单位(一行分配多少个字节) 结构体中最大的基本类型长度决定 2、确定成员的偏移量 成员的偏移量 = 成员自身类型的整数倍 3、收尾 结构体的总大小 = 分配单位的整数倍 结构体嵌套结构体自动对齐规则 1、确定确定分配单位(一行分配多少个字节) 所有结构体中 阅读全文
posted @ 2023-03-16 10:44 牙齿凤 阅读(18) 评论(0) 推荐(0) 编辑
摘要:结构体在堆区,结构体的指针成员指向堆区 结构体指针数组在堆区,结构体在堆区,结构体指针成员在堆区 阅读全文
posted @ 2023-03-16 10:27 牙齿凤 阅读(10) 评论(0) 推荐(0) 编辑
摘要:结构体数组 本质是数组,每个元素是结构体 结构体指针变量 本质是指针变量,保存的是结构体变量的地址 结构体的指针成员 指针变量作为结构体中的成员 结构体的指针成员指向堆区 相同类型的结构体变量可以整体赋值 如果结构体中没有指针成员,赋值不会出现浅拷贝 如果结构体中有指针成员,赋值容易造成浅拷贝(尽量 阅读全文
posted @ 2023-03-15 21:29 牙齿凤 阅读(17) 评论(0) 推荐(0) 编辑
摘要:结构体的定义 将多种数据结构封装在一起,形成新的结构叫结构体 结构体特点:每种数据结构都有自己的独立空间 结构体关键字:struct 结构体类型的定义方式 键盘给结构体变量中成员赋值 单独操作结构体中的成员 相同类型结构体变量之间赋值 结构体嵌套结构体 阅读全文
posted @ 2023-03-15 19:08 牙齿凤 阅读(17) 评论(0) 推荐(0) 编辑
摘要:const 修饰普通变量为只读变量 修饰 * 例如:const *p,在使用中,*p是只读,不能通过*p修改p所指向的空间内容。p可读可写,p可以指向其它空间 修饰指针变量 例如:int * const p = &num,在使用中,p只读,除了初始化,不能修改p的指向。*p可读可写,可以通过*p修改 阅读全文
posted @ 2023-03-10 10:33 牙齿凤 阅读(12) 评论(0) 推荐(0) 编辑
摘要:sprintf 用于组包,将零散的数据,按照固定的格式,组成字符串。一般用来发送信息 头文件:#include<stdio.h> int sprintf(char *str, const char *format, ......) 返回值为实际组包的长度 sscanf 用于解包,解析特定格式的数据 阅读全文
posted @ 2023-03-10 10:01 牙齿凤 阅读(14) 评论(0) 推荐(0) 编辑
摘要:strtok 字符串切割 头文件:#include<string.h> char *strtok(char *str, const char *delim) 第一次切割,str 必须指向待切割的字符串的首元素地址,delim 指向分隔符。后续切割,str 传NULL,delim继续指向分隔符 返回值 阅读全文
posted @ 2023-03-09 20:16 牙齿凤 阅读(11) 评论(0) 推荐(0) 编辑
摘要:atoi 将字符串转成 int 类型 头文件:#include<stdlib.h> atol 将字符串转成 long 类型 头文件:#include<stdlib.h> atof 将字符串转成 float 类型 头文件:#include<stdlib.h> 阅读全文
posted @ 2023-03-09 19:57 牙齿凤 阅读(48) 评论(0) 推荐(0) 编辑
摘要:strcmp 字符串比较 头文件:#include<string.h> int strcmp(const char *s1, const char *s2) int strncmp(const char *s1, const char *s2, size_t n) 返回值: 大于0,表示字符串 s1 阅读全文
posted @ 2023-03-09 19:41 牙齿凤 阅读(10) 评论(0) 推荐(0) 编辑
摘要:以 str 开头的函数,都是字符串操作函数,都是遇到 '\0' 结束操作 strlen 测量字符串的长度 头文件:#include<string.h> size_t strlen(const char *s) s 指的是测量字符串的首元素地址 strcpy 字符串拷贝函数 头文件:#include< 阅读全文
posted @ 2023-03-09 19:06 牙齿凤 阅读(13) 评论(0) 推荐(0) 编辑
摘要:内存泄漏 申请的内存,首地址丢失,无法再使用,也没有办法释放,这块内存就泄露了。例如: 内存回顾 阅读全文
posted @ 2023-03-08 16:03 牙齿凤 阅读(27) 评论(0) 推荐(0) 编辑
摘要:malloc 申请(堆区空间) 头文件:#include<stdlib.h> void *malloc(size_t size) size 表示申请的空间字节数 函数的返回值: 成功:返回值为空间起始地址 失败:NULL 特点:malloc申请的堆区空间不会自动清0 free 释放堆区空间 头文件: 阅读全文
posted @ 2023-03-08 15:32 牙齿凤 阅读(46) 评论(0) 推荐(0) 编辑
摘要:函数指针的定义 函数名,代表函数的入口地址 函数指针,本质是一个指针变量,只是该变量保存的是函数的入口地址 例如:int (*p)(int, int) = NULL; 函数指针 p 只能保存有两个 int 形参以及 int 返回值的函数入口地址 注意: 函数指针变量不要 +1,无意义 不要对函数指针 阅读全文
posted @ 2023-03-07 15:08 牙齿凤 阅读(96) 评论(0) 推荐(0) 编辑
摘要:指针变量作为函数的参数 如果想再函数内部修改外部变量的值,需要将外部变量的地址传递给函数 函数内部想要操作(读或写)外部数组元素,将数组名传递给函数 函数内部想要操作函数外部的二维数组,需要将二维数组名传递给函数 二维数组作为函数的形参,会被优化成一维数组指针。例如:int arr[3][3] 优化 阅读全文
posted @ 2023-03-07 14:35 牙齿凤 阅读(17) 评论(0) 推荐(0) 编辑
摘要:数组指针:本质是指针变量,保存的是数组的首地址 例如:int (*p)[5] = NULL; 数组首元素地址。例如:int arr[3] = {10, 20, 30}; arr就是首元素地址(&arr[0] == arr),arr + 1 跳过一个元素 数组的首地址。例如:int arr[3] = 阅读全文
posted @ 2023-03-02 19:35 牙齿凤 阅读(162) 评论(0) 推荐(0) 编辑
摘要:指针数组:本质是数组,只是数组的每个元素为指针 1、数值的指针数组 2、字符指针数组 char *arr1[4] = {"hehe", "xixi", "lala"}; 和 char arr2[4][128] = {"hehe", "xixi", "lala"}; 的区别: arr1 是指针数组,存 阅读全文
posted @ 2023-03-02 16:39 牙齿凤 阅读(155) 评论(0) 推荐(0) 编辑
摘要:字符数组 char str1[128] = "hello world"; str1是数组,开辟128字节空间,存放字符串"hello world"。 sizeof(str1) == 128字节 字符串指针变量 char *str2 = "hello world"; str2是指针变量,在栈区/全局区 阅读全文
posted @ 2023-03-02 11:18 牙齿凤 阅读(11) 评论(0) 推荐(0) 编辑
摘要:数组元素的指针变量和数组名(作为地址)等价 在使用中,[] 就是 *() 的缩写 为啥 arr == &arr[0] &arr[0] == &*(arr + 0) == arr + 0 == arr 指向同一数组元素的两个指针变量之间的关系 阅读全文
posted @ 2023-03-02 11:09 牙齿凤 阅读(11) 评论(0) 推荐(0) 编辑
摘要:指针变量的指向类型决定了取值宽度 指针变量的指向类型决定了+1的跨度 案例: 1、取出0x0102的值 2、取出0x0203的值 3、取出0x02的值 阅读全文
posted @ 2023-03-02 09:57 牙齿凤 阅读(46) 评论(0) 推荐(0) 编辑
摘要:指针和指针变量 指针就是内存的地址编号 指针变量,本质是变量,只是该变量保存的是内存的地址编号(不是普通的数值) 指针变量的定义 用 * 来修饰指针变量。例如: 1、定义一个指针变量p 保存 int num的地址 int *p; 2、定义一个指针变量p 保存数组int arr[5]首地址 int ( 阅读全文
posted @ 2023-03-01 10:10 牙齿凤 阅读(69) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示