<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Sunny_Cat_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Sunny_Cat_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Sunny_Cat_]]></copyright><item><title><![CDATA[引用 | c++]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/155424944</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/155424944</guid><author>Sunny_Cat_</author><pubDate>Sun, 30 Nov 2025 18:39:05 +0800</pubDate><description><![CDATA[引用不是新定义一个变量，而是给已存在变量取了一个别名，编译器不会为引用变量开辟内存空间，它和它引用的变量。注意：引用类型必须和引用实体是同种类型的（涉及中类型转换的知识）]]></description><category></category></item><item><title><![CDATA[const成员函数]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/155424846</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/155424846</guid><author>Sunny_Cat_</author><pubDate>Sun, 30 Nov 2025 17:58:12 +0800</pubDate><description><![CDATA[本文探讨了C++中const成员函数的相关问题。const成员函数通过修饰this指针来限制对类成员的修改，防止权限扩大问题。当非const对象调用const成员函数时属于权限缩小，是允许的。文章指出，const在*左右位置作用不同：左侧限制指向内容，右侧限制指针本身。在成员函数定义时应遵循原则：能定义为const的尽量定义为const，这样const和非const对象都能调用；需要修改成员变量的函数则不能定义为const。同时，重载运算符时非const函数会优先匹配非const对象调用，不会产生歧义。]]></description><category></category></item><item><title><![CDATA[计算二叉树的深度 | C语言]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154918228</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154918228</guid><author>Sunny_Cat_</author><pubDate>Sun, 16 Nov 2025 22:01:50 +0800</pubDate><description><![CDATA[摘要：计算二叉树深度时，应以左右子树中较深的子树高度加1为准，而非两子树高度之和。避免直接递归调用左右子树造成的重复计算，可采用记忆化优化或使用fmax函数比较子树高度。核心公式为：树深度 = max(左子树深度, 右子树深度) + 1。]]></description><category></category></item><item><title><![CDATA[设计循环队列 | C语言实现]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154755433</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154755433</guid><author>Sunny_Cat_</author><pubDate>Wed, 12 Nov 2025 22:55:09 +0800</pubDate><description><![CDATA[本文实现了一个循环队列的数据结构。通过数组存储元素，使用front和rear指针分别标记队首和队尾，并额外开辟一个空间来区分队列满和空的情况。关键操作包括：创建队列时分配k+1空间；通过模运算处理指针循环移动；判断空队列(front==rear)和满队列((rear+1)%(k+1)==front)；实现入队、出队、获取队首队尾元素等功能，均处理了边界情况。该方法保证了O(1)时间复杂度的基本操作，空间利用率高。]]></description><category></category></item><item><title><![CDATA[用两个队列实现栈 | C语言实现]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154544910</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154544910</guid><author>Sunny_Cat_</author><pubDate>Fri, 07 Nov 2025 23:35:32 +0800</pubDate><description><![CDATA[以下是LeetCode原题：https://leetcode.cn/problems/implement-stack-using-queues/https://leetcode.cn/problems/implement-stack-using-queues/把有元素的那个队列除最后一个元素全部入队没有元素的队列，然后把剩下的那一个元素出队。将新元素尾插到有元素的那个队。


下面是具体的实现代码]]></description><category></category></item><item><title><![CDATA[有效的括号详解 | C语言用动态数组实现栈解决]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154502992</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154502992</guid><author>Sunny_Cat_</author><pubDate>Thu, 06 Nov 2025 23:37:10 +0800</pubDate><description><![CDATA[该题解通过栈数据结构验证括号字符串的有效性，满足顺序闭合、类型匹配和数量正确三个条件。使用动态数组实现栈结构，包括初始化、压栈、出栈等操作。解题时遍历字符串：左括号入栈，右括号则与栈顶元素匹配，若不匹配或栈空则返回false。最后检查栈是否为空确保括号数量匹配。提供了两种条件判断写法：直接比较和使用临时变量存储栈顶值。算法时间复杂度O(n)，空间复杂度O(n)。]]></description><category></category></item><item><title><![CDATA[随机链表的复制 （带random的链表深度拷贝）| C语言实现]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154485737</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/154485737</guid><author>Sunny_Cat_</author><pubDate>Thu, 06 Nov 2025 21:23:01 +0800</pubDate><description><![CDATA[随机链表的复制以上是LeetCode元原题。]]></description><category></category></item><item><title><![CDATA[C语言解决轮转数组]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153842300</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153842300</guid><author>Sunny_Cat_</author><pubDate>Fri, 24 Oct 2025 21:40:10 +0800</pubDate><description><![CDATA[本文介绍了轮转数组问题的三种解法：1.暴力法通过多次交换元素实现右旋，时间复杂度O(N²)，空间O(1)；2.额外数组法利用新数组存储并重新组合元素，时间O(N)，空间O(N)；3.最优的逆序法通过三次局部和全局逆序操作实现，时间O(N)，空间O(1)。其中逆序法通过巧妙的分段翻转达到最优解。]]></description><category></category></item><item><title><![CDATA[C语言程序的环境和预处理]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153730431</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153730431</guid><author>Sunny_Cat_</author><pubDate>Wed, 22 Oct 2025 13:17:08 +0800</pubDate><description><![CDATA[define 机制包括了一个规定，允许把参数替换到文本中，这种实现通常称为宏（macro）或定义宏（define macro）。定义宏时需要注意以下规则：其中的parament-list 是一个由逗号隔开的符号表，它们可能出现在stuff中。参数列表的左括号必须与name紧邻。如果两者之间有任何空白存在，参数列表就会被解释为stuff的一部分。#defined定义的宏需要注意，宏参数的替换是整个直接替换，如果传递的是表达式则需注意优先级的变化，所以宏在定义时的参数最好全部带括号。]]></description><category></category></item><item><title><![CDATA[用一个宏交换一个数二进制的奇偶位]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153706576</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153706576</guid><author>Sunny_Cat_</author><pubDate>Wed, 22 Oct 2025 00:30:13 +0800</pubDate><description><![CDATA[所以在32bit位下，就是n&0xaaaaaaaa) >> 1和n&0x55555555) << 1，两者相加就是奇数和偶数互换后的a。实际上保留奇数位就是a与01010101按位与，01010101即是0x55，然后按位右移一位。同样的保留偶数位就是a与10101010按位与，10101010即是0xaa，然后按位左移一位。可以分别让奇数或偶数位的每一位与按位与1，这样可以保留对应的二进制位。如奇数位（从右往左数）是 0001，按位与1 是 0001，没有改变。]]></description><category></category></item><item><title><![CDATA[模拟实现offsetoff]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153706120</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153706120</guid><author>Sunny_Cat_</author><pubDate>Wed, 22 Oct 2025 00:05:57 +0800</pubDate><description><![CDATA[【代码】模拟实现offsetoff。]]></description><category></category></item><item><title><![CDATA[模拟实现atoi]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153705453</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153705453</guid><author>Sunny_Cat_</author><pubDate>Tue, 21 Oct 2025 23:25:45 +0800</pubDate><description><![CDATA[这是一个C语言实现的字符串转整数函数MyAtoi。主要功能包括： 处理空指针和空字符串 跳过前导空白字符 识别正负号 转换数字字符并处理溢出 使用全局状态标记转换有效性 遇到非数字字符立即返回当前结果 函数模拟标准库atoi的行为，但增加了错误检查机制，能正确处理边界情况和非法输入。主函数通过fgets获取输入并调用该转换函数，根据状态输出结果或错误信息。]]></description><category></category></item><item><title><![CDATA[找出单身狗 | 使用异或找出一组数字都是成对出现的数组中的两个单独数字]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153703004</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153703004</guid><author>Sunny_Cat_</author><pubDate>Tue, 21 Oct 2025 22:00:08 +0800</pubDate><description><![CDATA[摘要：本文介绍了一种使用异或运算找出数组中两个不成对数字的方法。首先将所有数字异或得到两个目标数字的异或值，然后通过找到该值中为1的二进制位来区分这两个数字。接着根据该位的值将数组分成两组分别异或，最终得到两个单独的数字。文中提供了完整的C语言实现代码，示例输出正确识别了数组中的5和6两个不成对数字。]]></description><category></category></item><item><title><![CDATA[C语言中Struct结构体的位段是什么？怎么使用？]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153697274</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153697274</guid><author>Sunny_Cat_</author><pubDate>Tue, 21 Oct 2025 19:45:52 +0800</pubDate><description><![CDATA[位段的声明和结构是类似的，有两个不同：1. 位段的成员必须是int、unsigned int 或signed int。2. 位段的成员名后边有一个冒号和一个数字。位段后的数字是其占用的Bit位，总计47个bit位，1个字节32个比特位，所以需要开辟两个字节的空间。这是因为有些成员仅需要非常少的空间，这时候就可以使用位段节省空间。]]></description><category></category></item><item><title><![CDATA[C语言结构体的特殊情况（结构体自引用和匿名结构体）]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/152848013</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/152848013</guid><author>Sunny_Cat_</author><pubDate>Tue, 21 Oct 2025 18:57:53 +0800</pubDate><description><![CDATA[1.结构体的自引用c语言引入结构体来描述复杂对象。结构是一些值的集合，这些值称为成员变量，结构的每个成员可以是不同类型的变量。数组： 一组相同类型的元素的集合结构体：是一组不一定相同元素的集合结构成员的类型：结构的成员可以是标量（变量）、数组、指针，甚至是其他结构体（嵌套结构体）。1.结构体的自引用结构体的成员甚至可以是自己，这种情况称为结构体自引用，但这存在问题。]]></description><category></category></item><item><title><![CDATA[用C语言复制一份文件]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153531359</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/153531359</guid><author>Sunny_Cat_</author><pubDate>Sat, 18 Oct 2025 21:16:39 +0800</pubDate><description><![CDATA[这段C语言代码实现了文件复制功能：首先以读取模式打开源文件data01.txt，然后以写入模式创建/打开目标文件data02.txt。通过while循环逐个字符读取源文件内容并写入目标文件，直到遇到文件结束符(EOF)为止。程序包含完善的错误处理机制，在文件操作完成后会正确关闭文件指针并置空。最终在源目录下生成与data01.txt内容完全相同的data02.txt文件。]]></description><category></category></item><item><title><![CDATA[C语言结构体的对齐]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/151195890</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/151195890</guid><author>Sunny_Cat_</author><pubDate>Thu, 04 Sep 2025 23:14:34 +0800</pubDate><description><![CDATA[结构体对齐是为了提高内存访问效率，通过牺牲空间换取时间。计算机以固定字长（如32位机4字节）读取数据，未对齐的成员需要多次访问。对齐规则包括：首成员偏移0，其他成员按对齐数（成员大小与编译器默认值的较小值）的整数倍存放，总大小为最大对齐数的整数倍。通过offsetof宏可查看成员偏移量。示例显示不同成员排列会导致不同结构体大小（S1占12字节，S2占8字节），建议将小成员集中存放以减少空间浪费。这种机制虽增加内存占用，但显著提升了数据读取性能。]]></description><category></category></item><item><title><![CDATA[void*类型的指针如何使用？]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/151123226</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/151123226</guid><author>Sunny_Cat_</author><pubDate>Tue, 02 Sep 2025 23:20:30 +0800</pubDate><description><![CDATA[如果用来接收int*类型的指针，只需要对(char*)str循环操作4次即可达到int*类型的效果，所以强制类型转换成(char*)是最有通用性的。有时候为了通用性，会将自定义函数的指针类型设置为void*以接收各种类型的指针。那么这种指针如何使用呢？如果想对这类指针解引用，需要先使用强制类型转换转换成需要类型的指针。那么void*类型的指针可以使用++或--操作符吗？]]></description><category></category></item><item><title><![CDATA[在编译器中&a是什么类型，为什么有时候取地址，编译器无法识别？]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/151089092</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/151089092</guid><author>Sunny_Cat_</author><pubDate>Tue, 02 Sep 2025 01:35:47 +0800</pubDate><description><![CDATA[如果直接&(c+1)编译器是无法识别的，因为数组名实际上是一个指向首元素的指针，c自己的地址和首元素的地址是不同的，且编译器只开辟了一个char**的空间存放c。c+1实际上可以解释为两个操作，一是c自己的地址加1，二是c指向的位置+1。&(c+1)执行的就是第一种操作，&(c+1)，取的是c+1自己的地址，但编译器没有给c+1自己的地址开辟空间，是越界访问，所以编译器报错。正确的做法是先解引用再取地址，&*(c+1)。在编译器中，对一个变量取地址，如&a，则&a在编译器中实际上是一个指向a的指针。]]></description><category></category></item><item><title><![CDATA[为什么一个二级指针可以维护一个存放二级指针的指针数组？]]></title><link>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/151088670</link><guid>https://blog.youkuaiyun.com/Sunny_Cat_/article/details/151088670</guid><author>Sunny_Cat_</author><pubDate>Tue, 02 Sep 2025 00:52:35 +0800</pubDate><description><![CDATA[同理，存放一级指针的指针数组也可以直接用二级指针维护，即便指针数组的数组名相当于一个二级指针；存放二级指针的指针数组也可以直接用三级指针维护，即便这里的指针数组的数组名相当于一个三级指针。数组也是同理，因为数组名自己就是指向其首元素的地址，所以可以直接用一级指针维护。同样的，二维数组可以直接用二级指针维护。但如果不要求对pt的自己的地址进行维护，仅要求对pt指向的地址进行维护，则也可以用一级指针指向pt指向的地址。]]></description><category></category></item></channel></rss>