自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 数据结构(初阶)笔记归纳1:复杂度讲解

目录复杂度讲解一、数据结构的概念(Data Structure)二、算法的概念(Algorithm)三、算法效率3.1.如何衡量一个算法的好坏3.2.算法的复杂度四、时间复杂度4.1.时间复杂度的概念4.2.大O的渐进表示法4.3.常见的时间复杂度计算例1:Func1函数中++count语句总共执行了多少次?例2:计算Func2函数的时间复杂度?例3:计算Func3函数的时间复杂度?例4:计算Func4函数的时间复杂度? 例5:计算strchr函数的时间复杂度?例6:计算Func5函数的时间复杂度?例7:计

2026-01-06 20:09:05 868

原创 C语言笔记归纳23:函数栈帧的创建与销毁

函数栈帧的本质:栈区为函数调用分配的 “临时工作间”,存储局部变量、参数、返回地址等;栈帧维护核心:ebp(栈底指针,固定)和 esp(栈顶指针,动态),通过 ebp 偏移量访问数据;栈帧创建流程:push ebp → mov ebp, esp → sub esp, n → push 寄存器 → 初始化栈空间;栈帧销毁流程:pop 寄存器 → mov esp, ebp → pop ebp → ret(弹出返回地址);传参规则:从右向左压栈,形参是实参的拷贝;返回值传递。

2025-12-21 14:23:55 665

原创 C语言笔记归纳22:预处理详解

C 语言内置了一组预定义符号,无需定义即可直接使用,核心作用是 “获取程序的编译信息 / 位置信息”,预处理阶段会自动替换为具体值。符号含义示例输出FILE当前编译的源文件路径(字符串)LINE当前代码的行号(整数)19DATE源文件被编译的日期(字符串)TIME源文件被编译的时间(字符串)"10:25:35"STDC编译器是否遵循 ANSI C 标准(遵循为 1,否则未定义)1(GCC)/ 未定义(VS2022)#define。

2025-12-20 19:19:09 889

原创 C语言笔记归纳21:编译与链接

test.o中的Add匹配到add.o中的Add(地址 0x1000);test.o中的printf匹配到标准库libc.so中的printf(系统库地址)。C 程序的生命周期:翻译环境(编译 + 链接)生成可执行程序,运行环境加载并执行程序;预处理核心:处理指令,展开宏、插入头文件、删除注释,生成.i文件;编译核心:词法 / 语法 / 语义分析 + 优化,将 C 代码转为汇编代码,生成.s文件;汇编核心:将汇编代码转为二进制指令,生成.o.obj目标文件;链接核心。

2025-12-19 20:30:24 1243

原创 C语言笔记归纳20:文件操作

类型存储规则特点文本文件内存中的二进制数据→转换为 ASCII 码→存储到硬盘可被记事本打开,人类可读二进制文件内存中的二进制数据→直接存储到硬盘(不转换)不可被记事本直接读取(乱码),存储高效打开必判断fopen后必须检查返回值是否为NULL,用perror打印错误;关闭必执行:读写完成后必须调用fclose,且关闭后将指针置空;模式要匹配:读操作对应"r"/"rb",写操作对应"w"/"wb",追加对应"a"/"ab";二进制优先。

2025-12-19 17:36:57 1217 1

原创 C语言笔记归纳19:动态内存管理

定义规则柔性数组必须是结构体的最后一个成员;柔性数组前面必须至少有一个其他成员;柔性数组的大小不计算在结构体的sizeof结果中。// 正确定义(两种写法,等价)struct S {int n;// 前面必须有其他成员int arr[];// 柔性数组(写法1)struct S {int n;int arr[0];// 柔性数组(写法2,C99支持)核心特点= 4(仅包含int n的大小,不包含arr柔性数组的内存需通过动态内存申请(malloc),大小由程序员指定;

2025-12-16 15:17:18 1378

原创 C语言笔记归纳18:自定义类型

目录自定义类型1. 结构体(struct):复杂对象的 “组合框架”1.1 结构体声明与变量定义1.2 结构体初始化(顺序 / 指定成员)1.3 特殊声明:匿名结构体(仅用一次)1.4 结构体自引用(链表节点核心)1.5 结构体重命名(typedef 用法与易错点)1.6 结构体内存对齐(底层规则 + 计算实战)1.6.1 对齐核心规则(VS 环境默认对齐数 = 8,gcc 无默认对齐数)1.6.2 对齐数定义1.6.3 4 个计算实战(逐行拆解)练习 1:成员顺序影响大小。

2025-12-15 09:39:09 1402

原创 C语言笔记归纳17:数据的存储

大端字节序:“高位字节”(钥匙的前半部分)插在 “低地址钥匙孔”,“低位字节”(钥匙的后半部分)插在 “高地址钥匙孔”;(低地址→高地址);小端字节序:“低位字节”(钥匙的后半部分)插在 “低地址钥匙孔”,“高位字节”(钥匙的前半部分)插在 “高地址钥匙孔”;(低地址→高地址);常用场景:x86 架构(PC、多数嵌入式开发板)为小端,C51 单片机、网络传输(TCP/IP)为大端。整数存储:内存存补码,正整数三码合一,负整数补码 = 反码 + 1;大小端。

2025-12-09 23:47:02 1312

原创 C语言笔记归纳16:内存函数

num 是字节数,不是元素个数:拷贝 5 个 int,num=5×sizeof (int)=20,不是 5;memcpy 不处理重叠内存:重叠拷贝用 memmove,避免数据覆盖;memset 按字节初始化:别用它初始化整型数组为 1、2 等数值(结果错误);memset 的 value 参数:传字符用单引号('x'),不是双引号("x",字符串地址);memcmp 按字节比较:要考虑 CPU 的大小端存储(小端是主流);void * 指针不能直接操作。

2025-12-07 22:36:12 1209

原创 C语言笔记归纳15:字符串函数

字符函数(ctype.h):优先用库函数(islower/toupper),比手动写 ASCII 范围更通用;字符串函数:无长度限制的函数(strcpy/strcat)易越界,优先用安全版(strncpy/strncat);模拟实现:吃透指针遍历、\0 处理、断言防空指针,才能避开核心坑;错误处理:调试时用 perror,快速定位文件、IO 操作的错误;避坑关键:分清无符号返回值(strlen)、数组名是常量(不能赋值)、四个 “0” 的区别。

2025-12-06 23:29:44 1099

原创 C语言笔记归纳14:指针(5)

指针的内存大小仅与平台有关(32 位 4 字节,64 位 8 字节),与指针类型(int*、char*、数组指针)无关;sizeof(指针)是指针本身大小,sizeof(*指针)是指向内容的大小。sizeof:编译期操作符,量内存大小,不执行表达式,数组名单独放里面算整个数组大小;strlen:运行期函数,数\0前字符数,必须传地址,无\0随机值,传非地址崩溃;数组名:默认是首元素地址,sizeof(数组名)和&数组名代表整个数组;指针运算指针 ± 整数:步长 = 指针指向类型的大小;

2025-12-04 01:19:07 1132

原创 C语言笔记归纳13:指针(4)

回调函数 = 由函数指针调用的函数(如calc里的add)主调函数 = 负责框架的函数(如calc)排序函数(主调)负责 “两两比较 + 交换” 的框架;比较函数(回调)负责 “怎么比”(整型比大小 / 字符串比 ASCII / 结构体比年龄)。void * 指针:万能地址接收器,适配任意数据类型(但要转成 char * 才能计算偏移);回调函数:把 “怎么比较” 的细节交给用户,实现框架通用;逐字节操作:用 char*+width 实现任意大小元素的交换(Swap 函数)。

2025-12-01 23:51:52 1281

原创 C语言笔记归纳12:指针(3)

/ 回调函数:具体的功能实现(Add/Sub等)// 主调函数:接收函数指针参数,统一处理逻辑int x = 0;int y = 0;int z = 0;printf("请输入两个操作数:");//调用回调函数(触发功能)int main()domenu();printf("请选择:>");//把Add作为参数传给calc,calc中回调Addbreak;//回调Subbreak;

2025-11-30 23:11:46 1030

原创 C语言笔记归纳11:指针(2)

/ 普通变量:值=10,地址=&a// 一级指针:值=&a,地址=&p// 二级指针:值=&p,地址=&pp// 三级指针(以此类推,很少用)return 0;// arr是指针数组,3个元素都是int*类型arr[0]arr1(指向第一个一维数组首元素);arr[1]arr2(指向第二个一维数组首元素);arr[2]arr3(指向第三个一维数组首元素)。数组名本质是首元素地址,仅sizeof(数组名)和&数组名例外;

2025-11-29 00:12:08 1180

原创 C语言笔记归纳10:指针(1)

类型* 变量名int main()int a = 10;// p是指针变量(本质是变量),存放a的地址;int*表示p指向的是int类型变量return 0;的作用:仅用于说明 “这个变量是指针类型”,和变量值无关;指针变量的命名:通常加p前缀(如pcpa),方便区分普通变量。指针的本质是地址,指针变量是存放地址的容器—— 掌握指针的关键,是理解 “类型决定操作规则”“地址操作直接操作内存”。指针虽难,但只要多敲代码、多画图分析,就能从 “害怕” 到 “熟练”!

2025-11-27 22:40:36 995

原创 C语言笔记归纳9:操作符详解

/ 结构体声明:描述学生的属性// 姓名int age;// 年龄int high;// 身高// 体重// 学号// 分号不能省略(结构体声明结束标志)// 定义全局结构体变量并初始化struct Student s1 = {"张三", 20, 180, 75.5f, "20230901022"};// 定义全局结构体变量(未初始化,成员为随机值)int main()// 定义局部结构体变量并初始化(指定成员顺序)

2025-11-26 00:30:52 1267

原创 C语言笔记归纳8:函数递归

递归是一种 “大事化小” 的解决问题思想 :将一个复杂的大问题,分解为一个或多个与原问题结构相同但规模更小的子问题,直到子问题小到能直接解决(基准情况),再通过子问题的解反向推导原问题的解。函数直接或间接调用自身。递推阶段:从Fact(4)逐层分解到Fact(0),问题规模不断缩小;回归阶段:从Fact(0)的结果1逐层反向计算,最终得到Fact(4)=24。递归的核心是 “找准基准条件 + 正确递推分解”:递推是 “分解问题”,回归是 “计算结果”。

2025-11-25 00:26:55 1321

原创 C语言笔记归纳7:VS 实用调试技巧

Bug 是程序中隐藏的缺陷或错误语法 Bug:拼写错误、缺少分号、括号不匹配(编译器直接报错,好解决);逻辑 Bug:算法错、条件判断失误(编译器不报错,结果不对,需调试);运行时 Bug:内存越界、除零错误(程序崩溃,最隐蔽,必须调试)。Debug 就是发现并解决 Bug 的过程,核心是 "让程序慢下来,观察它的一举一动"。就像医生给病人看病,不能只看表面症状(程序报错),还要通过 "检查"(调试工具)了解内部情况(变量变化、执行路径),才能找到病根(Bug)。

2025-11-24 23:27:35 795

原创 C语言笔记归纳6:扫雷游戏

/ 防止头文件重复包含// 游戏配置(宏定义:修改这里可快速调整游戏难度)#define ROW 9 // 游戏棋盘行数#define COL 9 // 游戏棋盘列数#define ROWS ROW + 2 // 实际数组行数(+2解决边界问题)#define COLS COL + 2 // 实际数组列数#define EASY_COUNT 10// 简单难度地雷数量// 函数声明// 初始化棋盘:arr=数组名,rows=数组行数,cols=数组列数,set=填充字符。

2025-11-24 23:07:13 1077

原创 C语言笔记归纳5:函数

库函数不能满足所有需求,自定义函数是 “按需设计的工具”,核心掌握 “语法结构 + 形参实参 + return 语句”。返回值类型 函数名(形式参数列表)函数体;// 实现功能的代码return 结果;// 返回计算结果(返回值类型非void时必须有)// 加法函数:接收两个int型“原材料”,返回int型“产品”int Add(int x, int y) // x、y是形式参数(形参)// 生产流程:求和,返回结果int main()// 修正原笔记笔误:scnf→scanf。

2025-11-18 18:07:02 894

原创 C语言笔记归纳4:数组

数据类型 数组名[常量值];// 常量值=货架格子数(元素个数)数据类型 数组名[行数(常量)][列数(常量)];数组是 C 语言处理批量数据的 “核心工具”,核心是 “相同类型、连续存储、下标访问”。掌握一维数组的创建、初始化、遍历,二维数组的行名列名逻辑,再通过两个实战练习巩固,就能为后续指针、结构体学习打下坚实基础。

2025-11-17 08:50:08 1095

原创 C语言笔记归纳3:分支和循环

(从左到右执行,结果是最后一个表达式);适用场景:简化多条赋值语句。int main()// 执行顺序:a=3→b=12→c=15// 输出:15(最后一个表达式的结果)return 0;这篇博客覆盖了 C 语言分支与循环的所有核心知识点:从结构化设计到 if/switch 分支,从四大运算符到三大循环,再到随机数生成与实战游戏,每个部分都有 “生活化比喻 + 可复制代码 + 避坑指南”。

2025-11-16 00:01:16 1072

原创 C语言笔记归纳2:数据类型与变量

这篇博客覆盖了 C 语言核心语法的 “三大支柱”:数据类型(容器)、操作符(工具)、输入输出(交互)”。

2025-11-15 14:57:20 816

原创 C语言笔记归纳1:C语言的常见概念

这篇博客涵盖了 C 语言入门的 13 个核心知识点:从语言本质、工具使用,到 main 函数、库函数、字符编码、转义字符、语句规则,每个知识点都配了实操代码和易错点避雷。

2025-11-15 00:16:03 859 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除