自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 树的基本概念与操作:构建数据结构的层级世界

通过本文的详细讲解,我们从树的基本概念和术语出发,深入学习了树的创建和基本操作,包括创建树、遍历树以及查找节点等。访问节点的顺序是先访问左子节点,然后访问根节点,最后访问右子节点。树结构被广泛应用于文件系统的组织。操作系统中的目录和子目录形成了一个层级化的树结构,顶级目录是根节点,其下的文件和子目录是子节点。2. 父节点(Parent) :除了根节点外,每个节点都有一个直接连接到它的节点,称为父节点。企业或组织的架构可以用树来表示,CEO 是根节点,各个部门是子节点,部门下的员工是更深层的子节点。

2025-06-08 08:35:47 1166

原创 深入探索串的高级操作:从算法到 LeetCode 实战

串是编程中最常用的数据结构之一,从简单的文本处理到复杂的文本匹配算法,串的应用无处不在。在掌握了串的基本概念、存储结构以及KMP算法之后,现在让我们深入探索串的更多高级操作,例如求子串、串的替换等,并通过LeetCode上的题目实战训练来进一步提升我们对串的处理能力。通过深入学习串的高级操作,包括求子串、串的替换、字符串反转和去重,我们进一步拓展了对串的处理能力。例如,将字符串 "hello world" 中的 "world" 替换为 "everyone",结果为 "hello everyone"。

2025-06-07 08:08:10 871

原创 串:探索 KMP 算法的高效模式匹配之旅

在匹配过程中,当出现字符不匹配时,根据 next 数组的值决定模式串的移动步数,避免了不必要的回溯。传统的暴力模式匹配算法在最坏情况下时间复杂度为 O(nm),其中 n 是目标串的长度,m 是模式串的长度。例如,“hello” 是一个长度为 5 的串。其中的每个字符称为串的元素,元素的个数称为串的长度。实现暴力模式匹配算法和 KMP 算法,分别对大型文本进行模式匹配测试,比较它们的执行时间,验证 KMP 算法的高效性。编写一个函数,给定一个目标串和多个模式串,找出所有的模式串在目标串中的出现位置。

2025-06-06 07:54:02 1148

原创 栈与队列的变种及应用:探索双端队列与优先队列的奥秘

在 pop 操作时,将主队列中的元素依次移到辅助队列,直到最后一个元素,即为要 pop 的元素。今天,让我们继续深入,探索栈与队列的变种 —— 双端队列和优先队列,它们是基础数据结构的拓展,具有更广泛的应用和更高的灵活性。- 先进先出的栈与队列混合操作 :在某些复杂的数据处理场景中,可能需要对数据进行混合的操作模式,双端队列提供了这种灵活性。在 LeetCode 的实战训练中,我们运用栈和队列的基本原理解决了一系列实际问题,这不仅加深了我们对这些数据结构的理解,还锻炼了我们运用数据结构解决复杂问题的能力。

2025-06-05 08:47:11 952

原创 栈与队列:数据结构的有序律动

这种操作规则使得队列呈现出 “先进先出”(First In First Out,FIFO)的特性,就像生活中的排队场景,先来的人先接受服务,后来的人排在队伍末尾等待。- 递归函数的实现 :递归本质上是函数自己调用自己,在这个过程中,系统会使用一个隐式的栈来保存函数的调用信息,包括参数、返回地址等。在数据结构的舞台上,栈与队列宛如两位优雅的舞者,以独特的节奏演绎着数据的进出规则。今天,就让我们一同去探索栈与队列的奇妙世界,掌握它们的操作技巧,并领略它们在实际应用中的风采。若匹配则出栈,否则返回不匹配。

2025-05-30 10:23:00 1350

原创 顺序表与链表专项训练:在 LeetCode 实战中深化数据结构理解

一种常见的解法是使用虚拟头节点,然后设置一个当前指针 curr,从两个链表的头节点开始比较,每次将较小的节点接到 curr 的后面,并移动相应的指针。我们可以优化,采用哈希表来记录已经遍历过的元素及其索引,这样在一次遍历中,对于每个元素,我们都可以在常数时间内判断 target - 当前元素的值是否存在于哈希表中,从而将时间复杂度降低到 O(n)。这道题让我们深刻感受到链表指针操作的精妙,在链表的插入、删除、反转等操作中,指针的调整是核心技巧,而掌握了这些技巧,就能灵活地对链表进行各种变形操作。

2025-05-28 09:38:49 659

原创 链表:数据结构的灵动舞者

今天,就让我们一同走进链表的世界,去领略它的定义、结构、操作,对比它与顺序表的优缺点,再通过代码实现其基本操作,开启一场精彩纷呈的数据结构探索之旅。它不像顺序表那样需要连续的存储空间,节点可以在内存中的任意位置,通过指针将它们串联成一个整体,就像用一根无形的线,将散落的珍珠串成一条精美的项链。例如,在单链表中插入节点,找到插入位置的前驱节点,然后将前驱节点的指针指向新节点,新节点的指针指向原前驱节点的下一个节点。找到被删除节点的前驱节点,将前驱节点的指针直接指向被删除节点的下一个节点,从而跳过被删除节点。

2025-05-27 14:05:50 1190

原创 探索数据结构之顺序表:从入门到精通

通过本文的深入浅出的讲解,我们一同探索了顺序表的定义、结构、各种操作的实现及其背后的时间复杂度,还细致剖析了它的优缺点。从高效便捷的随机访问,到在特定场景下略显繁琐的插入删除,顺序表的特性如同一把双刃剑,在不同的应用场景中发挥着独特的作用。接着,从插入位置开始,将之后的所有元素向后移动一位,然后将新元素插入到指定位置,并更新顺序表的大小。顺序表的物理结构采用数组来实现,数组的每个位置对应一个元素。在最坏情况下,插入位置为顺序表的开头,需要移动所有元素,时间复杂度为 O(n),其中 n 为顺序表的大小。

2025-05-26 09:02:48 1484

原创 时间与空间复杂度:算法效率的度量衡

如果是两层嵌套循环,外层循环从 1 到 n,内层循环也从 1 到 n,关键操作在内层循环体内,那么总执行次数是 n×n = n² 次,对应时间复杂度 O(n²)。外层循环执行 n - 1 次,内层循环平均执行 n/2 次(随着排序的进行,内层循环次数逐渐减少),总执行次数约为(n - 1)×(n/2)≈ n²/2,所以时间复杂度为 O(n²)。例如,如果执行次数是 3n² + 2n + 1,那么时间复杂度就是 O(n²),因为当 n 很大时,n² 项占主导地位,系数和低阶项的影响相对较小。

2025-05-25 09:43:03 1161

原创 C语言项目实践:贪吃蛇游戏开发详解

HWND hwnd = CreateWindow("SnakeGame", "贪吃蛇游戏", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, WIDTH + 20, HEIGHT + 40, NULL, NULL, hInstance, NULL);通过本文的讲解,我们深入实践了如何使用C语言开发贪吃蛇游戏,从游戏背景、效果演示到设计与分析,再到数据结构设计和相关API的使用,全面涵盖了开发过程中的关键环节。• 蛇的身体:用数组或链表存储蛇的各个身体段的位置。

2025-05-19 09:44:30 1051

原创 C语言双向链表专题详解:新手也能轻松掌握!

数据域存储节点的数据,previous指针指向当前节点的前驱节点,next指针指向当前节点的后继节点。• 头节点和尾节点:头节点是双向链表的第一个节点,尾节点是双向链表的最后一个节点。双向链表是一种链表结构,其中每个节点包含两个指针,一个指向前驱节点(previous),一个指向后继节点(next)。删除双向链表中的节点时,同样需要更新相关节点的previous和next指针,以保持链表的连贯性。在双向链表中插入节点时,需要更新相关节点的previous和next指针,以维护链表的完整性。

2025-05-17 10:25:42 626

原创 C语言单链表应用详解

通过本文的讲解,我们学习了单链表在C语言中的多种应用,包括经典算法和通讯录项目的实现。链表是一种常用的数据结构,它在计算机科学中有广泛的应用。今天,我将带你深入了解单链表在C语言中的应用,通过一些经典的算法和实际项目,让你掌握单链表的强大功能。通讯录项目是一个经典的链表应用,用于管理联系人信息。相比于顺序表实现,链表实现的通讯录在插入和删除操作上更为高效。移除链表中的指定元素,可以通过遍历链表并跳过需要移除的节点来实现。约瑟夫问题是一个经典的算法问题,通常用于模拟循环链表的应用场景。找出链表的中间节点。

2025-05-16 16:41:09 1060

原创 C 语言单链表专题详解:新手也能轻松掌握!

在 C 语言编程中,链表是一种非常重要的数据结构,它就像一串神奇的珍珠项链,每个珍珠(节点)通过细线(指针)串联起来,灵活且高效。今天,我将带你深入了解 C 语言单链表的魅力,从链表的概念、结构,到单链表的实现,再到链表的分类,让你全面掌握这一核心技能。在单链表中删除节点时,同样需要找到删除位置的前驱节点,然后调整指针的指向,并释放被删除节点的内存。• 尾节点:是链表的最后一个节点,其指针域通常为 NULL,表示链表的结束。在单链表中插入节点时,需要找到插入位置的前驱节点,然后调整指针的指向。

2025-05-15 08:43:34 459

原创 C语言顺序表应用详解:从理论到实践

同时,我们还介绍了一些顺序表的经典算法,如顺序查找、插入排序和二分查找,这些算法可以帮助我们更高效地处理顺序表中的数据。今天,我将带你深入了解 C 语言中顺序表的实际应用,通过一个基于动态顺序表的通讯录项目实现,掌握通讯录的基本操作,并学习一些顺序表的经典算法。顺序查找是最基本的查找算法,它从顺序表的第一个元素开始,依次与目标值进行比较,直到找到匹配的元素或遍历完整个顺序表。插入排序是一种简单直观的排序算法,它的工作原理是将未排序的元素插入到已排序序列的适当位置,直到所有元素都排序完成。

2025-05-14 08:01:54 961

原创 C语言顺序表专题详解:新手也能轻松掌握!

在C语言编程中,顺序表是一种非常基础且实用的数据结构,它就像是一个整齐排列的货架,能够帮助我们高效地存储和管理数据。今天,我将带你深入了解C语言顺序表的奥秘,从课前准备到顺序表的概念、结构、分类,再到动态顺序表的实现,让你全面掌握这一重要数据结构。通过本文的讲解,我们深入探讨了C语言顺序表的概念、结构、分类以及动态顺序表的实现。• 什么是数据结构:数据结构是计算机存储、组织数据的方式,它定义了数据的存储结构、数据之间的关系以及可以对数据执行的操作。顺序表的逻辑结构是线性的,数据元素之间存在先后关系。

2025-05-13 08:52:26 716

原创 C 语言预处理详解:开启编译之旅的魔法之门

今天,我将带你深入了解 C 语言的预处理,从预定义符号到`#define`宏定义,再到条件编译、头文件包含等众多指令,用通俗易懂的方式全面解析预处理的魔法,让你在编程之旅中轻松掌握这一重要环节。在调试代码时很有用,你可以定义`DEBUG`宏来开启调试信息的输出,调试完成后用`#undef DEBUG`关闭它,避免影响正式的程序运行。• `__TIME__`:表示文件被编译的时间,格式是“小时:分钟:秒钟”。• `#else`:与`#ifdef`或`#ifndef`配合,定义条件不满足时的代码。

2025-05-12 09:43:55 1426

原创 C 语言编译和链接详解:新手也能轻松掌握!

通过本文的讲解,我们深入探讨了 C 语言的编译和链接过程,从翻译环境和运行环境的区别,到预编译、编译、汇编和链接的具体操作,再到多个源文件的编译和链接、常见错误及解决方法,以及编译和链接过程中的选项和优化、动态链接和静态链接等内容。在 C 语言的编程世界里,编译和链接是将我们编写的代码转换为可执行程序的两个关键步骤。经过预编译后,头文件`stdio.h`的内容会被插入到源文件中,宏`PI`会被替换为它的值`3.14159`,并且如果定义了`DEBUG`宏,相应的调试信息代码也会被保留,否则会被移除。

2025-05-11 13:36:23 483

原创 C 语言文件操作详解:新手也能轻松掌握!

今天,我将带你深入了解 C 语言的文件操作,从为什么需要文件,到文件的打开、读写、关闭等基本操作,再到文件的随机读写和缓冲区等高级概念,让你全面掌握这一重要技能。程序运行时的数据通常存储在计算机的内存中。然而,内存中的数据是临时的,程序一旦结束,数据就会丢失。通过本文的讲解,我们全面了解了C语言文件操作的各个方面,从文件的基本概念到顺序读写、随机读写以及文件缓冲区的处理。文件操作是连接程序和外部世界的重要桥梁,通过它,我们可以实现数据的持久化存储和外部数据的输入,大大增强了程序的功能和应用范围。

2025-05-10 08:58:33 693

原创 C语言动态内存管理详解

今天,我将带你深入了解C语言的动态内存管理,从为什么需要动态内存分配,到如何使用`malloc`、`calloc`、`realloc`和`free`函数,再到常见的内存错误和经典笔试题分析,最后还会介绍柔性数组以及C/C++程序内存区域的划分,让你全面掌握这一重要主题。通过本文的讲解,我们深入探讨了C语言的动态内存管理,包括动态内存分配的必要性、 malloc 、 calloc 、 realloc 和 free 函数的使用方法、常见的内存错误、经典笔试题分析,以及柔性数组和程序内存区域的划分。

2025-05-09 08:59:14 690

原创 C语言自定义类型:联合与枚举详解

在这个例子中,我们首先将字符`'A'`赋值给联合体的`c`成员,然后打印出来。最后,我们再次打印`c`成员的值,发现它也变成了`'A'`,因为联合体的内存是共享的。在这个例子中,我们声明了一个`Weekday`类型的变量`day`,并将其赋值为`TUESDAY`。例如,在上面的例子中,`char`类型通常占用1个字节,而`int`类型通常占用4个字节。在这个例子中,我们声明了一个名为`Un`的联合体类型,它可以存储一个字符(`char`)或一个整数(`int`)。// 输出:As a char: A。

2025-05-08 13:34:30 698

原创 C语言自定义类型:结构体详解

在这个例子中,`struct Student`就是我们自定义的结构体类型,它包含了三个成员变量:`name`(字符数组,用于存储姓名)、`age`(整型,用于存储年龄)和`sex`(字符数组,用于存储性别)。对于新手来说,结构体可能会有一些复杂的概念,但只要多加练习,理解每个知识点并运用到实际编程中,你就能熟练掌握结构体,为你在 C 语言编程的道路上增添一份强大的能力。这行代码不仅创建了结构体变量`stu1`,还将其成员变量分别初始化为:`name`为“张三”,`age`为 20,`sex`为“男”。

2025-05-07 07:09:41 1061

原创 C语言常见概念详解:新手也能轻松掌握!

今天,我将用通俗易懂的语言,带你深入了解 C 语言常见概念,无论你是完全零基础的新手,还是对 C语言略有了解但想要巩固知识的读者,这篇文章都能满足你的需求!通过本文的讲解,我们从 C 语言是什么、它的历史背景,到编译器选择、项目结构,再到程序的基本构成、关键字、字符和字符串、语句分类以及注释的重要性等多个方面进行了全面的介绍。对于新手来说,C 语言可能看起来有些复杂,但只要一步一个脚印,理解每个概念的含义和用法,并通过大量的实践来巩固所学知识,你就能逐渐掌握这门强大的编程语言,开启属于你的编程之旅。

2025-05-06 05:08:57 343

原创 C语言数据在内存中的存储详解

• 例如,同样的 32 位整数 0x12345678 在小端模式下的内存存储顺序为:地址 0x0000 存储 0x78,地址 0x0001 存储 0x56,地址 0x0002 存储 0x34,地址 0x0003 存储 0x12。• 例如,一个 32 位整数 0x12345678 在大端模式下的内存存储顺序为:地址 0x0000 存储 0x12,地址 0x0001 存储 0x34,地址 0x0002 存储 0x56,地址 0x0003 存储 0x78。在计算机中,整数是以二进制形式存储在内存中的。

2025-05-05 08:35:54 944

原创 C语言内存函数详解:从基础到实战

从`memcpy`的内存块复制,到`memmove`的重叠区域复制,再到`memset`的内存初始化,以及`memcmp`的内存比较,新手友好,这些函数在日常编程里超常用,学会它们,内存操作不再是难题!今天,我就来给大家详细介绍这些内存函数,从最常见的`memcpy`、`memmove`、`memset`,到`memcmp`,不仅讲怎么用,还带你亲手模拟实现它们,新手友好,保证让你学完就能上手!• `memmove`也是复制内存块的,但它比`memcpy`高级一点,能处理源和目标内存块有重叠的情况。

2025-05-04 09:47:02 691

原创 C语言字符函数和字符串函数详解:从基础到实战

从字符分类函数的字符身份鉴定,到字符串函数的各种操作,包括 strlen、strcpy、strcat、strcmp 等经典函数的使用和模拟实现,还拓展了 strncpy、strncat、strncmp、strstr、strtok、strerror 等函数的用法。今天,我就来给大家一一介绍这些函数,从最基础的字符分类函数,到常用的字符串操作函数,不仅讲怎么用,还带你亲手模拟实现它们,新手友好,保证让你学完就能上手!返回值:​如果找到子字符串,返回子字符串在主字符串中的第一个字符的指针。

2025-05-03 08:04:45 1237

原创 C语言深入理解指针(六):sizeof与strlen的那些事儿

宝子们,我们在指针的江湖已经驰骋了好多章啦,从指针基础、回调函数,到函数指针数组和 qsort 的模拟实现,一路升级打怪,相信大家对指针的理解已经越来越深入咯。`func5`是对的,它定义的是一个指针数组,每个元素是指向 int 的指针,和二维数组有点像但不完全一样,主要用于存储一组指针。这里,`sizeof(a)`和`sizeof(int)`输出的结果一样,因为 a 是 int 类型变量,它们都告诉你在你的系统里,一个 int 类型占多少字节的内存空间。答:`p = arr`后,p 指向第一个元素 1。

2025-05-02 10:10:01 846

原创 C语言深入理解指针(五):回调函数与函数指针数组的奇妙旅程

这样不仅代码简洁,而且扩展性超好,以后想加新的运算,直接写个新函数,传给主函数就行,不用动原来主函数的代码!宝子们,我们在指针的江湖里摸爬滚打了不少时日啦,从最开始的懵懂,到现在对字符指针、数组指针、函数指针等的熟练运用,是不是感觉自己的 C 语言武功已经小有成啦?回调函数,听着是不是有点高深?就是说,当一个函数的指针作为参数,被传递给另一个函数时,这个被调用的函数就叫回调函数。这就是`qsort`的厉害之处,它通过回调函数,把排序的具体逻辑和数据的比较逻辑分离,让使用者能根据自己的需求定制比较规则。

2025-05-02 09:02:33 424

原创 C语言深入理解指针(四):玩转字符指针、函数指针与数组指针

宝子们,我们在指针的江湖已经驰骋了好几章啦,从指针基础、const 修饰、野指针 avoidance,到数组、二级指针和多维数组模拟,一路上升级打怪,相信指针的神秘面纱在大家眼里已经一层层揭开咯。比如状态机,不同状态对应不同处理函数,把处理函数指针存进数组,程序运行时根据当前状态从数组取对应函数执行,轻轻松松实现流程的动态转移,代码结构清晰又高效。我们先瞅瞅基础用法,比如有个字符变量`ch`,咱用字符指针`pc`指向它,就能通过指针操作字符啦。关键来了,还有个超常见的用法,就是用字符指针指向字符串常量。

2025-05-01 08:09:36 568

原创 C语言深入理解指针(三):数组、二级指针与多维数组模拟

时,p 是一个指向整型的普通指针,你可以通过`p++`等操作改变它指向的地址。但数组名`arr`不行,`arr++`这种操作是非法的,因为数组名天生就是一个指向首元素的固定指针,它的值不能改变,也就是说,数组名本质上是一个指针常量。这里,`pp`存储的是指针`p`的地址,而`p`又存储着变量`a`的地址。所以,`**pp`就相当于先通过`pp`找到`p`,再通过`p`找到`a`,最终取到`a`的值。也就是说,函数内部的`arr`其实是一个指向整型的指针,它和`int *arr`是等价的写法。

2025-04-30 07:28:39 634

原创 C语言:深入理解指针(二)

通过本文对 const 修饰指针、野指针的避免、assert 断言,以及指针的使用和传址调用的深入讲解,我们进一步强化了对指针的理解和应用能力。上一篇文章我们深入理解了指针的基本概念,从内存和地址的关系,到指针变量的定义、类型及其运算,最后还探讨了指针在动态内存分配、数组操作和函数参数传递等场景的应用,并提醒大家注意野指针、悬挂指针和指针类型不匹配等问题。今天,咱们继续深入指针的世界,聚焦 const 修饰指针、野指针的避免、assert 断言,以及指针的使用和传址调用。此时,p 是一个指向常量的指针。

2025-04-29 11:55:22 560

原创 C语言:深入理解指针(一)

指针类型决定了编译器如何解读内存中的数据。指针`p1`是整型指针,它指向的内存地址处的数据会被编译器按照`int`类型来解读,即读取 4 字节的数据。执行`p = p + 1`后,指针`p`向后移动了一个元素所占的字节数(`int`类型占 4 字节),指向了数组的第二个元素。在这个例子中,指针`p`指向了变量`a`的内存地址,但变量`a`在其所在的作用域结束后被释放,此时`p`就成了悬挂指针。在`swap`函数中,通过指针参数可以访问并修改主函数中变量`x`和`y`的值,从而实现了两个变量值的交换。

2025-04-29 07:42:35 1097

原创 C语言操作符详解:从入门到精通

单目操作符只对一个操作数进行操作,常见的单目操作符包括自增(`++`)、自减(`--`)、正号(`+`)、负号(`-`)、逻辑非(`!• 赋值操作符:用于将一个值赋给一个变量,包括简单赋值(`=`)和复合赋值(如`+=`、`-=`、`*=`、`/=`、`%=`、`<<=`、`>>=`、`&=`、`|=`、`^=`等)。• 关系操作符:用于比较两个数值之间的大小关系,包括大于(`>`)、大于等于(`>=`)、小于(`<`)、小于等于(`<=`)、等于(`==`)和不等于(`!

2025-04-28 08:03:53 1038

原创 C语言函数递归:轻松入门与实战解析

记住,递归的关键在于找到合适的终止条件和递归调用的方式,同时也要注意递归的效率问题,在实际编程中合理地运用它,让你的代码更加优雅和高效。• 解答:递归终止条件是递归函数的关键部分,它决定了递归什么时候停止。这样,在编译器支持尾递归优化的情况下,编译器可以将尾递归转换为循环结构,从而避免递归调用带来的额外开销,提高效率并且减少栈溢出的风险。在这个递归过程中,我们把移动 n 个盘子的问题分解为移动 n-1 个盘子、移动 1 个盘子和再移动 n-1 个盘子三个步骤,通过不断地递归调用,最终实现整个汉诺塔的移动。

2025-04-27 19:08:14 1162

原创 C语言数组和函数实践:扫雷游戏

对于每个非地雷格子,计算其周围 8 个方向上的地雷数量,并将该数量存储在游戏板对应的格子中。用字符'0'到'8'表示周围的地雷数量,'0'表示周围没有地雷。你可以尝试对这个游戏进行拓展,例如增加标记地雷的功能、调整游戏难度级别(通过改变游戏板大小和地雷数量)、添加计时功能等,以进一步提升你的编程技能。通过函数来实现游戏的各个功能模块,如初始化游戏板、显示游戏板、处理玩家输入、检测游戏是否结束等。遍历游戏板,如果所有非地雷格子都被打开(即显示板上对应的格子不是''),则返回 1 表示胜利,否则返回 0。

2025-04-26 18:12:16 719 1

原创 C语言函数精讲:模块化编程的核心

在这个例子中,我们定义了一个函数指针类型`FuncPtr`,并创建了一个函数数组`operations`,其中存储了`add`和`subtract`函数的地址。在这个例子中,函数的返回值类型是`int`,函数名称是`add`,参数列表包含两个整型参数`a`和`b`。然而,由于使用了值传递,函数内部对`a`和`b`的修改并不会影响`main`函数中的`x`和`y`。要定义可变参数函数,需要包含`<stdarg.h>`头文件,并使用`va_start`、`va_arg`和`va_end`宏来处理可变参数。

2025-04-25 19:46:06 675

原创 C语言数据类型与变量详解

在这个示例中,我们声明并初始化了三个不同数据类型的变量`age`(整型)、`height`(浮点型)和`gender`(字符型),然后使用`printf`函数输出它们的值。接着,我们修改了这些变量的值,并再次输出,展示了变量的可变性。在这个例子中,`a`是整型,`b`是浮点型,它们相加时,整型`a`会被自动转换为浮点型,然后进行浮点加法运算,结果存储在浮点型变量`result`中。这里,我们将双精度浮点型变量`d`强制转换为整型,小数部分会被直接截断,结果存储在整型变量`i`中,`i`的值为`3`。

2025-04-25 15:33:24 262

原创 C语言数组全解析

对于新手来说,掌握数组的用法是编程进阶的一个重要步骤。在 C 语言中,数组作为函数参数时,实际上传递的是数组的首地址(即数组的第一个元素的地址),也就是说,函数对数组元素的操作会影响原始数组。在这个例子中,`numbers[0]`被初始化为 1,`numbers[1]`被初始化为 2,而`numbers[2]`、`numbers[3]`和`numbers[4]`都被初始化为 0。这里,`numbers`是数组的名称,`int`表示数组中存储的数据类型是整数,`5`表示数组的长度,即可以存储 5 个元素。

2025-04-24 16:34:42 566

原创 猜数字小游戏

printf("************ 难度************\n");printf("*****1.简单(范围在1-100)*****\n");printf("*****2.普通(范围在1-200)*****\n");printf("*****3.困难(范围在1-500)*****\n");printf("*****4.地狱(范围在1-200)*****\n");printf("********菜单********\n");printf("*****1.开始游戏*****\n");

2025-04-23 19:46:18 489

原创 c语言中的分支与循环

记住,编程是一个不断学习和实践的过程,不要害怕犯错,每一个错误都是一个学习的机会。一开始,`i`被初始化为 1。如果是,就执行循环体,打印`i`的值,并将`i`增加 1。然后,我们使用`for`循环遍历每个成绩,并使用`if-else`语句来判断每个成绩的等级。在这个例子中,`for`循环初始化`i`为 1,然后检查`i`是否小于或等于 5。如果是,就执行循环体,打印`i`的值,并将`i`增加 1。`do-while`循环和`while`循环类似,但它的特点在于循环体至少会执行一次,然后再检查条件。

2025-04-21 22:13:03 583

原创 技术之路,从这里开始

无论是优化日常任务,还是开发一个小工具,我都希望能通过自己的努力,把想法变成现实。1. 项目驱动学习:通过实际项目来学习新知识,比如写一串代码(现在刚开始启航),开发一个小网站、设计一个自动化脚本,或者解决一个具体的问题。更大的目标是参与开源项目,与全世界的开发者一起协作,为技术社区贡献自己的力量。周末9小时:将所学到的知识运用到实践当中,从模仿写代码,到能独立写代码并在Gitee上维护记录。3. 记录与分享:写博客、做笔记,把学习过程中的收获和思考记录下来,同时通过分享加深理解。2025年3月29日。

2025-03-29 11:01:10 318

空空如也

空空如也

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

TA关注的人

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