- 博客(45)
- 收藏
- 关注
原创 【数据结构学习】数据结构和算法
本文系统介绍了数据结构与算法的基础知识。数据结构部分阐述了数据结构的定义、三要素(逻辑结构、存储结构和数据运算),重点分析了线性与非线性逻辑结构,以及顺序存储和链式存储两种物理结构的特点。算法部分明确了算法的五大特性,并指出优秀算法应具备正确性、可读性、健壮性和高效性。复杂度分析部分详细讲解了时间复杂度的计算方法,通过多个实例演示了如何确定基本操作、计算频度并推导大O表示法。全文为理解数据结构和算法分析提供了系统化的理论基础。
2025-12-25 00:12:21
828
原创 【C语言学习】预处理详解
本文介绍了C语言预处理相关的几个重要概念:预定义符号、#define定义常量和宏、宏替换规则以及宏与函数的对比。主要内容包括:1)常用的预定义符号如__FILE__、__LINE__等的作用和使用示例;2)#define定义常量时的注意事项;3)宏定义的基本语法和常见问题,特别是运算符优先级和参数副作用问题;4)宏替换的具体规则;5)宏和函数在代码长度、执行速度等方面的对比分析。文章通过具体代码示例展示了这些概念的实际应用场景,并给出了使用建议。
2025-12-18 21:54:11
901
原创 【C语言学习】编译和链接
本文详细介绍了C语言程序的翻译环境和运行环境。翻译环境包括编译(预处理、编译、汇编)和链接两个阶段,其中预处理处理宏定义、头文件包含等,编译进行词法、语法和语义分析生成汇编代码,汇编转换为机器指令,链接完成地址分配和符号重定位。运行环境涉及程序载入内存、执行main函数、使用堆栈和静态内存管理变量,直至程序终止。文章通过Linux下的gcc命令示例和具体代码分析,展示了从源代码到可执行程序的完整转换过程,重点解释了多文件项目中符号决议和重定位的关键作用。
2025-12-18 20:54:50
683
原创 【C语言学习】文件操作
本文介绍了C语言中文件操作的基本概念和使用方法。首先解释了为什么需要使用文件来永久保存数据,然后详细说明了文件的分类(程序文件和数据文件)以及文件名组成。重点讲解了二进制文件和文本文件的区别,以及文件的打开关闭流程。文章还介绍了流的概念、标准流和文件指针的作用,并提供了文件顺序读写函数的分类和使用示例。最后通过代码展示了如何用fopen函数打开文件并进行错误处理。这些内容为C语言文件操作提供了基础指导。
2025-12-16 00:15:50
897
原创 【C语言学习】动态内存管理
动态内存管理摘要 C语言中动态内存管理允许程序在运行时灵活分配和释放内存,通过malloc、calloc、realloc和free函数实现。与静态内存分配相比,动态内存管理具有更高灵活性,内存位于堆区,需手动释放;而静态内存由编译器自动分配,位于栈区或静态区,大小固定。 malloc分配连续内存空间,返回void*指针;calloc会初始化内存为0;realloc可调整已分配内存大小;free用于释放内存。使用时必须检查返回值,释放后应将指针置NULL避免野指针问题。动态内存管理能更好适应不确定的内存需求,
2025-12-09 22:03:31
816
原创 【C语言学习】联合体和枚举
联合体和枚举是C语言中两种重要的自定义数据类型。联合体(共用体)允许在同一内存空间存储不同类型数据,但同一时间只能存储一种类型,其大小由最大成员决定,常用于节省内存或判断机器字节序。枚举用于定义一组有名称的常量集合,提高了代码可读性和维护性,相比#define更安全且便于调试。联合体通过共享内存实现不同类型数据的存储,而枚举通过命名常量使代码更规范。两者都能优化代码结构,提升程序可读性和效率。
2025-12-09 20:08:01
714
原创 【C语言学习】结构体详解
本文介绍了C语言结构体的核心概念和使用方法。主要内容包括:1)区分结构体类型(抽象的数据类型)和结构体变量(具体实例);2)结构体类型的声明方式,包括一般声明、匿名结构体、嵌套结构体和自引用;3)结构体变量的创建与初始化方法;4)结构体成员的两种访问方式("."和"->"运算符);5)重点讲解了结构体内存对齐规则,包括偏移量计算、对齐数概念以及嵌套结构体的对齐处理。通过示例代码展示了结构体在实际编程中的应用,并解释了内存对齐对结构体大小的影响机制。这些知识是理解
2025-11-26 22:39:58
908
原创 【C语言学习】数据在内存中存储
文章摘要:本文详细介绍了整形和浮点数在内存中的存储方式。整形以二进制补码形式存储,正数三码相同;浮点数采用IEEE 754标准,分为符号位S、指数E和有效数字M三部分。同时解释了大小端字节序的概念及其产生原因,并通过代码示例展示了浮点数与整形存储方式的差异。最后分析了浮点数的读取规则,包括E为全0或全1时的特殊处理方式。通过内存存储原理,解释了代码运行结果与预期不符的原因。
2025-11-24 21:55:57
709
原创 【C语言练习】汉诺塔
汉诺塔问题是一个经典的递归问题,源于印度传说。游戏规则要求将n个圆盘从起始柱A移动到目标柱C,每次只能移动一个圆盘且小圆盘不能放在大圆盘上。通过分析发现,n个圆盘的移动次数为2^n-1次。解决方案采用递归思想:先将上面n-1个圆盘通过C柱移到B柱,再将最大的圆盘直接移到C柱,最后将B柱上的n-1个圆盘通过A柱移到C柱。代码实现分为移动轨迹和移动次数两种形式,通过递归函数Hanoi()实现。该问题展现了递归算法的精妙,是理解递归思想的经典案例。
2025-08-26 23:28:30
331
原创 【C语言练习】青蛙跳台阶
摘要: 青蛙跳台阶问题是一个经典的递归问题。当青蛙每次可以跳1或2个台阶时,n个台阶的跳法数f(n)等于f(n-1)和f(n-2)之和,形成斐波那契数列。例如: n=1时1种跳法 n=2时2种跳法 n=3时3种跳法 通过递归实现:当n≤2时返回n,否则返回Jump(n-1)+Jump(n-2)。这个解法直观展示了递归在分步问题中的应用。
2025-08-24 22:29:09
244
原创 【C语言学习】scanf函数
本文详细介绍了C语言中scanf函数的使用方法,包括其定义、基本语法、常见占位符、VS编译器报错解决方案、返回值特性以及赋值忽略符等关键知识点。文章通过代码示例演示了scanf如何读取用户输入、处理不同数据格式、跳过空白字符,并解释了%s占位符的安全隐患及限制输入长度的解决方法。同时对比了scanf与printf函数的异同,特别说明了%c和%s的特殊处理方式。最后介绍了赋值忽略符*的用法,帮助开发者更灵活地处理非标准格式输入。
2025-07-31 23:50:05
2299
原创 【C语言学习】printf函数
printf函数英文名全称叫print format,即按照格式打印数据,它的基本用法是将参数文本输出到屏幕。运行结果:printf函数不会在结尾自动添加换行符(\n),运行结束后,光标就停留在输出结束位置,不会自动换行。如果文本需要换行,可以通过在结尾插入换行符来实现。另外,printf是在标准库的头文件stdio.h定义的,因此,在使用之前,必须在源文件头部包含这个头文件,即#include <stdio.h>。
2025-07-27 22:53:40
1148
原创 【C语言学习】C语言内存函数
本文介绍了四种内存操作函数:memcpy、memmove、memset和memcmp。重点分析了memcpy和memmove函数的功能与实现差异。memcpy用于非重叠内存区域的复制,而memmove则能处理重叠内存区域的复制。文章通过代码示例展示了两种函数的使用场景,并详细讲解了memcpy的模拟实现过程。特别指出,当源地址和目标地址存在重叠时,memcpy可能产生未定义行为,此时应使用memmove函数。最后强调,虽然某些编译器的memcpy能处理重叠内存,但这不是标准要求,为保证程序可移植性应使用me
2023-11-27 00:27:07
1078
原创 【C语言学习】字符串函数
本文介绍了C语言中常用的字符串处理函数,重点讲解了strlen和strcpy函数的使用及模拟实现。strlen函数用于计算字符串长度,返回类型为size_t,需要注意其与sizeof的区别以及返回值类型带来的潜在问题。文章展示了三种strlen模拟实现方法:计数器法、指针相减法和递归法。strcpy函数用于字符串拷贝,使用时需注意源字符串必须包含'\0',目标空间足够大且可修改。文章还演示了strcpy函数的模拟实现过程,包括拷贝'\0'之前的字符和终止符。这些字符串函数是C语言编程的基础,掌握它们对处理字
2023-11-13 00:15:17
232
原创 【C语言学习】字符函数
本文介绍了C语言中的字符分类函数,主要包括islower、isupper等函数的使用方法和功能。这些函数用于判断字符类型(如大小写字母、数字、标点符号等),均需包含<ctype.h>头文件。islower检查小写字母返回非零值,isupper检查大写字母返回非零值。文章还汇总了其他字符分类函数如isdigit、isalpha等,并提供了具体使用示例和运行结果,帮助开发者快速掌握字符处理技巧。
2023-10-08 23:45:52
373
原创 【C语言学习】深入理解指针(5)
本文对比了sizeof和strlen的区别:sizeof是操作符,计算变量或类型的内存空间大小,单位是字节;strlen是库函数,统计字符串中'\0'之前的字符个数。通过多个数组运算示例展示了它们的不同表现:sizeof在编译时确定大小,不关心内容;strlen运行时计算长度,依赖'\0'结束符。文章还分析了表达式在sizeof中的特殊行为,以及数组名在不同上下文中的含义差异。
2023-09-24 23:29:09
142
原创 【C语言学习】深入理解指针(4)
摘要 本文介绍了回调函数的概念及其应用,通过计算器程序的优化案例展示了如何使用函数指针简化重复代码。回调函数是指将函数地址作为参数传递,在特定条件触发时被调用的函数。文章还详细讲解了qsort函数的用法,包括其参数含义和void指针的特性。void是一种通用指针类型,可以接收任意数据类型地址,但不能直接进行指针运算。这些技术要点为编写更灵活、高效的C程序提供了重要方法。
2023-09-16 00:00:37
118
原创 【C语言学习】深入理解指针(3)
本文主要讲解了C语言中字符型指针变量和数组指针变量的使用。字符指针可以指向单个字符或字符串,指向字符串时存储的是首元素地址,但常量字符串不可修改。数组指针存放数组地址,形式为int (*p)[10],通过解引用可访问数组元素。二维数组传参本质是传递第一行地址,形参可用数组指针接收。文中通过代码示例演示了字符指针和数组指针的具体应用,并分析了《剑指offer》中的字符串比较题目,解释了不同初始化方式导致的内存分配差异。最后指出数组指针常用于模拟实现二维数组。
2023-09-07 23:54:15
243
3
原创 【C语言学习】深入理解指针(2)
本文讨论了C语言中数组名与指针的关系及应用。首先指出数组名本质上是数组首元素的地址,但在sizeof和&操作时例外。通过代码示例验证了arr、&arr[0]和&arr的区别,重点说明&arr代表整个数组地址。接着探讨了使用指针访问数组的多种等价形式。在数组传参部分,揭示了函数内部无法正确获取数组元素个数的原因,并说明形参可以写成数组或指针形式。最后介绍了冒泡排序的基本思想及实现方法,强调相邻元素比较的核心概念。全文通过多个代码示例和运行结果,深入浅出地解析了数组与指针的关键知
2023-08-23 22:01:29
115
原创 【C语言学习】深入理解指针(1)
文章摘要 本文主要讲解了计算机内存和指针的基本概念。首先通过宿舍楼房间编号的类比,说明内存单元也需要编号(地址)以便CPU快速访问数据。内存被划分为一个个字节单元,每个单元都有唯一地址(指针)。 文章详细介绍了: 内存编址原理,32位机器最多支持4GB内存; 取地址操作符(&)获取变量首地址; 指针变量存储地址,通过解引用操作符(*)访问指向的数据; 指针变量大小在32位系统为4字节,64位系统为8字节,与指针类型无关。 这些基础知识为理解C语言指针机制奠定了重要基础,指针作为地址的别名,为灵活操作
2023-08-17 23:34:15
186
原创 【C语言学习】详解操作符
【摘要】本文系统介绍了C语言中的二进制操作与位运算。首先讲解了二进制与十进制、八进制、十六进制的转换方法,包括权重计算和除法取余规则。重点阐述了原码、反码和补码的概念,说明计算机存储整数使用补码的原因。详细解析了移位操作符(<<左移和>>右移)的运算规则,区分了逻辑右移与算术右移的差异。最后介绍了四种位操作符(&按位与、|按位或、^按位异或、~取反)的运算原理,强调所有位操作都是基于补码进行的。全文通过具体代码示例演示了各种位运算的实际应用。
2023-08-12 22:28:22
216
原创 【C语言学习】VS调试技巧
本文介绍了计算机编程中的"bug"概念起源和调试方法。"bug"一词源于1947年哈佛Mark II计算机中发现的一只飞蛾引发的故障。调试(debug)过程包括发现错误、定位问题、分析原因、提出解决方案及修正测试。VS编译器中的debug版本包含调试信息,release版本则进行优化。文章详细讲解了VS调试快捷键(F9设置断点、F5启动调试、F10逐过程、F11逐语句)以及监视窗口和内存观察两种调试方法。最后通过阶乘求和的代码案例,演示了实际调试过程。调试是程序员必备
2023-08-02 23:41:50
188
1
原创 【C语言练习】扫雷游戏(含递归展开)
如果get_mine_count函数的返回值为0,说明坐标周围没有雷,这时我们就可以利用递归函数Expand进行展开。相反,如果get_mine_count函数的返回值为非0,在show数组该坐标上显示雷的个数。
2023-07-31 22:21:57
254
原创 【C语言练习】100-200之间的素数(详解)
在解题之前,我们需要先了解什么是素数,可能不少小伙伴已经忘记甚至压根儿不清楚素数的概念。没关系,那么就让我来向大家简单介绍一下。素数也被称为质数,是大于1的自然数,除了1和它自身外,不能被其他自然数整除。例如,13、17、29等都属于素数。而我们需要做的就是去编写一个程序,让它帮助我们来找到100-200之间所有这样的数。
2023-07-30 19:14:27
2219
原创 【C语言学习】函数递归
在C语言中,递归是基于函数,最简单的递归程序:调试代码,出现把一个大型复杂问题层层转化为一个与原问题相似,但规模较小的子问题来求解。直到子问题不能再被拆分,递归就结束了。所以递归的思考方式就是把大事化小的过程。
2023-07-29 21:36:15
183
原创 【C语言学习】static和extern
本文介绍了C语言中static和extern关键字的作用域和生命周期特性。static可修饰局部变量、全局变量和函数,其核心作用是改变变量的存储位置和可见性:修饰局部变量时将其存储从栈区改为静态区,延长生命周期但作用域不变;修饰全局变量和函数时将其外部链接属性改为内部链接属性,限制其仅能在当前源文件使用。extern则用于声明外部符号,使其他文件能访问全局变量或函数。通过对比代码示例,展示了static如何改变变量行为,并提供了实际使用建议,帮助开发者合理运用这些关键字控制变量和函数的可见范围。
2023-07-26 21:50:50
836
1
原创 【C语言学习】函数
本文介绍了C语言中函数的基本概念和使用方法。主要内容包括:1.函数定义,分为数学函数和C语言函数(库函数和自定义函数);2.库函数的使用方法,通过示例讲解了memset函数的用法和文档阅读技巧;3.自定义函数的语法形式和应用实例(交换两个变量值的函数);4.形参与实参的关系,指出形参是实参的临时拷贝;5.return语句的使用注意事项;6.函数调用的两种方式(传值调用和传址调用),并通过交换变量值的例子说明传址调用的必要性。文章通过具体代码示例帮助理解函数的核心概念和使用方法。
2023-07-25 23:31:01
262
原创 【C语言学习】getchar和putchar
本文介绍了C语言中的字符输入输出函数getchar和putchar。getchar返回字符的ASCII码值或EOF(-1),putchar返回写入字符或EOF。通过密码确认的示例,展示了使用scanf/printf和getchar/putchar的差异:scanf会留下换行符导致getchar读取错误。解决方法是在getchar前使用循环清空输入缓冲区。文章提供了修改后的代码,解决了密码确认时误判的问题,演示了正确的字符输入输出处理方式。
2023-07-21 23:36:56
417
1
原创 【C语言练习】计算n的阶乘
计算n!主要有两种方法,首先通过for循环实现,另一种就是通过递归的方法实现。for循环实现起非常简单,下面重点讲解如何利用递归法实现。n!可以看作是n*(n-1)* (n-2)*…*1。把n!写成函数形式,即f(n),求n!的过程可以写成如下形式:f(1)=1;从上述过程可以看出,求f(n) 就需要调用f(n-1),求f(n-1) 就需要调用f(n-2)…它们都会调用同一个函数f,只是参数不同而已,即函数自己调用自己,这便称为递归。以n=5为例,其递归过程如下图所示。
2023-07-17 21:18:31
1021
1
原创 【C语言学习】二分查找
二分查找算法详解 二分查找是一种高效的搜索算法,适用于有序数组。其核心思想是通过不断缩小搜索范围来快速定位目标元素。算法步骤为:初始化左右指针,计算中间位置,比较中间元素与目标值,根据比较结果调整搜索区间(左半区或右半区),直到找到目标或区间为空。文章通过具体示例(在数组[1-10]中查找7)演示了二分查找的完整过程,并提供了C语言实现代码(包括循环和函数版本)。该算法时间复杂度为O(log n),相比线性查找效率显著提升。
2023-07-16 20:41:06
249
1
原创 【C语言学习】编程中常用的语句
本文介绍了C语言中的五种基本语句类型:空语句、表达式语句、函数调用语句、控制语句和复合语句。重点讲解了控制语句的分类和使用,包括条件判断语句(if、switch)、循环语句(while、for)和转向语句(break、continue等)。通过代码示例展示了各种语句的具体应用,如比较数值、打印序列等。文章还详细说明了函数调用的值传递机制和return语句的作用,以及break和continue在循环控制中的差异。这些内容为理解C语言程序流程控制提供了基础指导。
2023-07-11 01:41:58
3344
原创 【C语言学习】初识结构体
【摘要】本文介绍了C语言中结构体的基本概念和应用。结构体用于组合不同类型的数据,如学生信息(学号、姓名、年龄等)。定义格式为struct后接结构名和成员变量,可定义变量数组。结构体支持三种初始化方式:定义时直接赋值、逐个赋值或任意顺序赋值。成员访问使用"."或"->"操作符,前者用于变量,后者用于指针。匿名结构体只能使用一次。结构体有效简化了复杂数据的表示,避免了大量重复代码。
2023-07-05 23:31:13
119
1
原创 【C语言学习】初识指针变量
文章摘要 本文介绍了计算机内存管理和指针的基本概念。内存被划分为1字节大小的单元,每个单元都有唯一地址。变量存储在内存中,可通过&运算符获取地址。指针变量(如int* p)专门用于存储地址,其中int表示指向的数据类型。通过解引用操作符*可以访问或修改指针指向的变量值。文中提供了C语言代码示例,演示了如何声明指针、获取变量地址以及通过指针修改变量值。
2023-07-04 22:07:51
115
原创 VS编译器护眼模式设置
在打开的窗口中选择自定义颜色,设置“色调 = 85,饱和度 = 123,亮度 = 205”或者设置“RGB"分别为“199,237,204”首先在菜单栏中选择“工具”→ “选项”→ “环境”→“字体和颜色”→ “显示项”→ “纯文本”→ “项背景”→ “自定义”
2023-07-04 19:04:01
1276
原创 【C语言学习】函数、数组及操作符(初识)
本文介绍了C语言中的三个重要概念:函数、数组和操作符。函数作为代码复用工具,通过Add函数示例展示了其定义和使用方法。数组部分讲解了定义、下标访问等基本操作。操作符章节详细分类介绍了算术、赋值、单目、关系、条件和逗号等多种操作符的使用方式和特性,包括前置/后置自增、强制类型转换等特殊情况。全文通过代码示例和图示直观地解释了这些核心编程概念的基本用法和注意事项。
2023-07-03 23:51:19
153
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅