自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小满しょうまん的博客

小满しょうまん的博客

  • 博客(112)
  • 收藏
  • 关注

原创 #109 memcpy

本文介绍了C语言内存拷贝函数memcpy的功能与实现。memcpy用于将指定字节数的数据从源内存复制到目标内存,不处理内存重叠情况。函数接收目标指针、源指针和字节数三个参数,返回目标空间起始地址。文章通过示例代码演示了memcpy的基本用法,并给出了一个模拟实现方案,该实现采用逐字节拷贝方式完成内存复制功能。memcpy常用于需要高效内存拷贝的场景,使用时需包含<string.h>头文件。

2025-07-17 16:26:29 128

原创 Python3 基础语法

本文介绍了Python编程基础要点: 编码默认UTF-8,支持指定其他编码 标识符规则:字母/下划线开头,区分大小写,不能使用关键字 列出所有Python保留关键字及其分类 注释方式:单行用#,多行用'''或"""代码块通过缩进表示,必须保持一致性 多行语句可使用\换行或利用括号特性 数字类型包括int、bool、float、complex 字符串特性:引号使用、转义、索引切片、拼接等操作 文章提供了标识符合法性的判断方法,并详细说明了字符串的各种操作方式。

2025-07-17 16:05:43 1004

原创 HTML基本骨架

摘要:HTML(超文本标记语言)是网页的基础结构,由<html>作为根元素,包含<head>和<body>两部分。<head>存放配置信息如字符编码(UTF-8)、标题和图标;<body>包含网页显示内容。基本结构包括<!DOCTYPE>声明、<html>标签、<head>配置区和<body>内容区,其中<meta>标签定义编码和移动端适配,<title>设置网页标题。HTML通过标签构建网页框架,是网页开发的必备知识。

2025-07-14 15:36:30 93

原创 #108 strerror

strerror函数用于将错误码转换为对应的错误信息字符串。它接收一个错误码参数(通常使用errno全局变量),返回字符串形式的错误描述。使用时需包含<string.h>和<errno.h>头文件。示例代码展示了如何遍历错误码对应的信息,以及如何在实际操作(如打开文件失败时)通过errno获取错误描述。该函数仅适用于标准库函数的错误处理。

2025-07-01 17:00:10 205

原创 #107 strstr

strstr函数是C语言标准库中的字符串查找函数,用于在字符串中查找子字符串的首次出现位置。函数原型为const char *strstr(const char *str1, const char *str2),包含在<string.h>头文件中。参数str1是被查找字符串,str2是要查找的子字符串。若找到则返回首次出现位置的指针,否则返回NULL。示例代码演示了如何使用strstr查找字符串并输出结果。该函数可暴力实现,也可用更高效的KMP算法实现。

2025-07-01 16:46:01 227

原创 #106 strncmp

strncmp函数是C语言中用于比较两个字符串的函数,最多比较指定数量的字符。其原型为int strncmp(const char *str1, const char *str2, size_t num),参数包括两个待比较字符串和最大比较字符数num。返回值规则与strcmp类似,但只比较前num个字符。与strcmp相比,strncmp更加灵活和安全,可以限制比较范围,防止越界访问。示例代码展示了strncmp比较字符串前3个和前4个字符的不同结果。

2025-07-01 16:28:56 144

原创 #105 strncat

strncat函数用于字符串追加,将源字符串最多num个字符追加到目标空间。与strcat相比,strncat更安全灵活,允许指定追加长度且不依赖源字符串的\0终止符。示例代码演示了其用法,函数返回目标空间起始地址。strncat避免了strcat可能导致的缓冲区溢出问题,是更推荐的字符串追加方式。

2025-07-01 16:19:10 145

原创 #104 strncpy

本文介绍了C语言中的strncpy函数,该函数用于字符串拷贝,比strcpy更安全。strncpy将源字符串拷贝到目标空间,最多拷贝指定数量的字符,避免了越界风险。通过代码示例演示了strncpy的使用方法,并对比了strcpy和strncpy的区别:strcpy拷贝到'\0'为止易越界,而strncpy通过指定拷贝长度更安全。函数返回目标空间的起始地址。

2025-07-01 15:54:25 163

原创 #103 strcmp

strcmp函数用于比较两个字符串,通过逐个字符ASCII码值的比较来确定大小关系。标准返回值规则为:大于0表示第一个字符串更大,等于0表示相等,小于0表示更小。文章演示了strcmp的使用方法,并提供了一个模拟实现,该实现通过字符指针遍历和比较,最后返回差异字符的差值。代码示例展示了实际比较结果和判断逻辑,模拟实现则体现了strcmp的核心工作原理。

2025-07-01 15:36:25 148

原创 #102 strcat

strcat函数用于将源字符串追加到目标字符串末尾,需确保源字符串以'\0'结尾,目标空间足够大且可修改。示例代码演示了如何将“world”追加到“hello”后面,结果为“hello world”。使用时需注意目标字符串中需有'\0'标识追加位置。

2025-07-01 15:12:24 181

原创 #101 strcpy

本文介绍了C语言strcpy字符串拷贝函数的使用方法和注意事项。主要内容包括:1)函数原型及参数说明;2)代码演示展示基本用法;3)模拟实现版本,重点分析实现细节(参数顺序、断言检查、const修饰指针等)。特别强调使用时需注意源字符串必须以\0结尾、目标空间足够大且可修改等要点。通过标准库函数与自定义实现的对比,帮助理解字符串拷贝的工作原理。

2025-07-01 14:51:16 154

原创 #100 strlen

本文介绍了C语言标准库函数strlen的使用及其模拟实现方法。strlen用于计算字符串长度,返回值为size_t类型(无符号),计算时不包括末尾的'\0'字符。文章通过示例代码演示了strlen的使用注意事项,特别提醒了无符号返回值可能导致的判断逻辑问题。同时提供了三种strlen的模拟实现方式:计数器方式、递归方式和指针差值方式,帮助读者深入理解字符串长度计算的原理。所有实现均包含参数校验以提高代码健壮性。

2025-07-01 14:21:16 273

原创 #99 字符转换函数

C语言提供了tolower()和toupper()函数进行大小写字母转换,比手动加减32更便捷。示例代码演示了如何遍历字符串,使用islower()检测小写字母并用toupper()转换为大写,其他字符保持不变。输出结果为“TEST STRING.\n”。

2025-07-01 11:21:18 95

原创 #98 字符分类函数

C语言提供了多种字符分类函数,都包含在ctype.h头文件中。这些函数用于判断字符类型,如iscntrl判断控制字符,isspace判断空白字符,isdigit判断数字字符等。它们的使用方法类似,通过返回值判断字符是否符合条件。示例展示了islower函数的使用,并演示如何将字符串中的小写字母转为大写。这些函数在字符处理时非常实用,能简化类型判断的逻辑。

2025-07-01 10:57:05 239

原创 #97 qsort函数讲解

qsort是C语言标准库中的通用排序函数,采用快速排序算法实现。它通过4个参数实现任意类型数据的排序:待排序数组指针、元素个数、元素大小和比较函数指针。比较函数决定排序顺序(升序/降序)。示例展示了如何使用qsort排序整型数组(通过数值比较)和结构体数组(按年龄或姓名比较)。其中结构体排序涉及字符串比较时需使用strcmp函数。该函数灵活性高,只需提供合适的比较方法即可处理各种数据类型。

2025-07-01 10:13:30 141

原创 #96什么是回调函数

回调函数是通过函数指针传递的函数,由调用方在特定条件触发时执行。以酒店叫醒服务为例,客户登记不同叫醒方式(如播放音乐、敲门),酒店在指定时间调用对应函数。代码中,vakeup_service接收客户信息和时间,通过函数指针pf调用预登记的回调函数(如vakeup_fun1)执行具体叫醒操作。回调函数的核心特点是:由调用方定义实现,但由第三方在特定时机触发执行,实现事件响应机制。

2025-06-30 21:17:50 168

原创 #95 typedef关键字

本文介绍了C语言中typedef关键字的使用方法,主要讲解了如何为基本类型、指针类型、数组指针和函数指针创建类型别名。通过示例展示了typedef的基本语法,包括将unsigned int简化为uint,将int重命名为prt_t等。特别强调了对于数组指针和函数指针,新类型名必须写在右侧的特殊语法规则。这段文字简明扼要地解释了typedef的各种应用场景,帮助读者理解如何使用typedef简化复杂类型声明。

2025-06-30 21:00:41 130

原创 #94 函数指针变量

函数地址与指针变量解析:本文介绍了函数地址的概念,指出函数名和&函数名都能获取函数地址。通过示例演示了函数指针变量的定义和使用方法,解析了函数指针类型的结构。文章还展示了通过函数指针调用函数的两种方式,最后引用了《C陷阱和缺陷》中的两段复杂代码示例。

2025-06-30 16:55:22 239

原创 #93 二维数组传参的本质

本文探讨了C语言中二维数组传参的本质。二维数组可以看作元素为一维数组的数组,其数组名表示第一行的地址。因此,二维数组传参实际上是传递第一行这个一维数组的地址。形参既可写成二维数组形式,也可写成指针形式(如int (p)[5])。通过代码示例展示了两种传参方式的实现,并指出访问数组元素时指针形式的写法((*(p+i)+j))。

2025-06-30 15:53:53 149

原创 #92 数组指针变量

数组指针变量是指向数组的指针变量,存放数组地址。它与指针数组不同,如int (*p)[10]表示指向10个整型元素数组的指针。初始化时用&数组名获取数组地址并赋值给数组指针变量。数组指针类型包含元素类型、变量名和指向数组大小。理解数组指针需要区分指针与数组的优先级关系,确保指针属性正确。

2025-06-30 14:42:17 272

原创 #91 指针数组模拟二维数组

本文展示了一个C语言指针数组的使用示例。代码定义了三个整型数组arr1, arr2, arr3,并将它们的首地址存储在指针数组parr中。通过双重循环遍历并打印出所有数组元素。内存布局图直观展示了三个数组和指针数组的存储关系。该示例演示了如何通过指针数组来统一管理多个数组的访问。

2025-06-30 13:23:22 86

原创 #90 指针数组

指针数组是存放指针的数组,其每个元素都是地址(指针),可以指向特定的内存区域。与整型数组存放整数、字符数组存放字符类似,指针数组专门用于存储指针变量。通过图示可以看出,指针数组的每个元素都能指向另一块独立的内存空间。

2025-06-30 11:31:19 154

原创 #89 二级指针

本文介绍了二级指针的概念及其使用方法。指针变量本身也有地址,存放指针变量地址的指针称为二级指针。文章通过代码示例展示了二级指针的定义和使用,解释了解引用操作:*ppa访问一级指针pa,**ppa访问原始变量a。同时说明了二级指针的赋值操作等价于修改一级指针或原始变量。二级指针主要用于处理指针变量的地址,是C语言中重要的多级间接访问机制。

2025-06-30 11:21:37 193

原创 #88 冒泡排序

本文介绍了冒泡排序算法的两种实现方法。基础版本通过嵌套循环两两比较相邻元素,将较大元素逐步“冒泡”到数组末尾。优化版本增加了标志位检测,若某轮未发生交换则提前终止排序,提高效率。两种方法均采用C语言实现,包含数组打印功能,通过示例演示了从{9,8,...,0}到{0,1,...,9}的排序过程。优化版在数据基本有序时能显著减少不必要的比较次数。

2025-06-30 10:16:03 99

原创 #87 一维数组传参

本文介绍了C语言中一维数组传参的相关知识。主要内容包括:1) 一维数组传参的基本方法,通过示例展示了如何将数组传递给函数;2) 揭示了数组传参的本质是传递数组首元素地址,解释了为什么在函数内部无法正确计算数组元素个数;3) 提供了数组参数设计的实际案例,展示了如何编写数组初始化(set_arr)和打印(print_arr)函数。文章指出函数形参可以写成数组或指针形式,但本质上都是接收指针,并强调数组传参时需要额外传递数组长度信息。

2025-06-30 08:55:16 151

原创 #86 使用指针访问数组

本文展示了如何使用指针来访问和操作数组。通过定义一个数组和指针,演示了如何用指针遍历数组进行输入输出操作。代码示例中,指针p指向数组arr的首地址,通过指针算术(p+i)来访问数组元素,既可以使用scanf进行输入,也能用printf输出数组内容。这种指针访问方式与直接使用数组名(arr+i)的效果相同,体现了指针与数组之间的紧密关联。这种方法简洁高效,是C语言中常用的数组操作技巧。

2025-06-27 16:04:16 109

原创 #85 数组名的理解

本文探讨了数组名在C语言中的特殊性质。首先指出数组名通常等同于数组首元素的地址,并通过代码示例验证了这一结论。但存在两个例外情况:当数组名单独出现在sizeof运算符中时,它代表整个数组的大小;而&数组名则表示整个数组的地址。文章通过打印地址的示例对比了这些区别,最后强调除这两种情况外,数组名都表示首元素地址。这些特性对于理解数组和指针的关系具有重要意义。

2025-06-27 15:21:56 118

原创 #84 传值调用和传址调用

C语言函数调用分为传值调用和传址调用两种方式。传值调用(如求最大值函数Max)直接传递变量值,函数内部操作不影响原变量;传址调用(如交换变量函数Swap2)通过指针传递变量地址,可修改原变量值。当函数只需读取变量值时用传值调用,需要修改变量时则必须使用传址调用。两者区别在于能否影响主调函数中的原始变量。

2025-06-27 14:47:57 285

原创 Git安装配置教程,小乌龟可视化安装配置教程

Git安装指南 整个安装过程简单快捷

2025-06-27 11:20:04 891

原创 #83 assert断言

assert.h头文件提供的assert()宏用于运行时检查程序条件,若表达式为假则报错终止程序,并输出错误信息、文件名和行号。其优势在于:1) 自动标识错误位置;2) 可通过定义NDEBUG宏关闭断言,方便调试和发布版本切换。缺点是会增加运行时间,建议在Debug版本启用,Release版本禁用以优化性能。这种机制有效平衡了调试便利性与最终产品效率的需求。

2025-06-27 10:39:01 225

原创 #82 野指针

本文详细讲解了C语言中野指针的概念、成因及规避方法。野指针是指向不可知内存位置的指针,类比为"野狗"形象说明其危险性。主要成因包括:指针未初始化、指针越界访问和指针指向已释放空间。规避方法有:初始化指针变量(明确指向或置NULL)、避免指针越界、及时将闲置指针置NULL并检查有效性、不返回局部变量地址。通过合理管理指针使用,可以有效避免野指针带来的程序安全问题。

2025-06-27 10:38:44 335

原创 #81 指针运算

本文介绍了C语言指针的三种基本运算方式。指针与整数加减实现数组元素的遍历访问;指针减指针计算元素间距,可用于字符串长度计算;指针关系运算实现数组边界判断。通过具体代码示例展示了指针运算的实际应用,包括数组遍历和strlen函数的模拟实现,体现了指针在内存访问和数据操作中的灵活性和高效性。

2025-06-27 10:38:17 262

原创 #80 const修饰指针

本文探讨了C语言中const修饰指针的四种情况。通过四个测试代码,分析了const在不同位置时的作用:1)无const修饰时指针和指向内容均可修改;2)const在左侧时限制修改指向内容但允许改变指针指向;3)const在右侧时限制指针指向但允许修改内容;4)两侧都有const时指针指向和内容均不可修改。实例演示了如何通过指针间接修改const变量,并指出这种操作可能破坏const的语义约束。文章清晰展示了const修饰指针时的语法规则和限制效果。

2025-06-27 10:37:18 185

原创 #79 指针变量类型的意义

指针类型决定了指针操作的权限和步长:1)指针解引用时,类型决定了操作的内存大小(char操作1字节,int操作4字节);2)指针加减整数时,类型决定了步长(char步长1字节,int步长4字节)。void*指针为泛型指针,可接收任意类型地址,但不能直接运算,常用于函数参数实现泛型编程。指针类型虽不影响变量大小,但决定了指针操作的行为特性。

2025-06-27 10:36:48 303

原创 #78 指针变量和地址

本文介绍了C语言中指针的基本概念和使用方法。主要内容包括:1) 指针变量和地址的关系,通过取地址操作符(&)获取变量地址;2) 指针变量的定义和类型拆解,以及解引用操作符(*)的使用;3) 指针变量在不同平台(32位/64位)下的大小差异。文章通过代码示例说明了指针的操作原理,并指出指针变量的尺寸只与平台相关,与指针类型无关。这些基础知识是理解C语言指针机制的重要前提。

2025-06-27 10:36:16 621

原创 #77 内存和地址

内存管理机制类似宿舍编号系统:计算机内存被划分为字节单元(如宿舍房间),每个单元有唯一编号(地址/指针)。CPU通过地址快速定位所需数据,就像通过门牌号找到宿舍。地址由硬件设计实现,32位机器的32根地址总线可表示2^32个地址。CPU将地址信息发送至内存,通过数据总线获取对应数据。这种编址方式实现了硬件间高效协同工作,本质上是一种硬件层面的标准化约定。

2025-06-27 10:35:05 296

原创 #76 C语言常见的错误类型

C语言常见错误可分为三类:编译型错误(语法错误)、链接型错误(标识符问题)和运行时错误。编译错误容易通过错误信息定位;链接错误多因标识符不存在、拼写错误或头文件缺失导致;运行时错误最为复杂,需要借助调试工具逐步排查。掌握这些错误类型有助于提高代码调试效率。

2025-06-27 10:33:20 108

原创 #75 VS2022中的监视和内存

摘要:本文介绍了在调试过程中观察变量值的两种主要方法:监视和内存查看。通过一个C语言示例程序展示了如何调试观察数组、变量等数据的变化。此外还提到调试窗口中的其他功能如自动窗口、局部变量、反汇编和寄存器窗口,建议读者自行验证使用。调试观察的前提条件是程序必须处于调试运行状态。

2025-06-26 08:01:54 194

原创 #74 VS2022调试的快捷键

本文介绍了在Visual Studio中调试代码的基本方法,重点讲解了常用调试快捷键的功能和使用场景。主要内容包括:1)调试前需将VS设置为Debug模式;2)核心快捷键F9(断点设置)、F5(启动调试)、F10(逐过程)、F11(逐语句)的具体用法;3)条件断点和CTRL+F5(不调试运行)的使用场景。这些快捷键可以帮助程序员更高效地进行代码调试,观察程序执行细节。文章还提供了VS更多快捷键的参考链接。

2025-06-26 08:01:37 298

原创 #73 Debug和Release

Debug和Release是程序开发的两种编译配置模式。Debug版本包含调试信息且不作优化,便于程序员调试代码;Release版本经过优化以提高运行效率,最终交付给用户使用。二者的主要区别在于:Debug版本文件较大且运行速度慢但可调试,Release版本文件较小且运行速度快但不适合调试。在开发过程中通常使用Debug模式,程序测试完成后再切换为Release模式生成最终产品。

2025-06-26 08:01:15 133

空空如也

空空如也

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

TA关注的人

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