<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[guanyasu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/guanyasu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; guanyasu]]></copyright><item><title><![CDATA[位运算技巧]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/54910897</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/54910897</guid><author>guanyasu</author><pubDate>Tue, 07 Feb 2017 15:55:25 +0800</pubDate><description><![CDATA[一提起位运算，人们往往想到它的高效性，无论是嵌入式编程还是优化系统的核心代码，适当的运用位运算总是一种迷人的手段，或者当您求职的时候，在代码中写入适当的位运算也会让您的程序增加一丝亮点，最初当我读《编程之美》求“1的数目”时，我才开始觉得位运算是如此之美，后来读到 《Hacker's
 Delight》，感慨到Henry S.Warren把位运算运用的如此神出鬼没，很多程序都十分精妙，我觉得在一]]></description><category></category></item><item><title><![CDATA[动态申请二维数组]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/54236299</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/54236299</guid><author>guanyasu</author><pubDate>Sun, 08 Jan 2017 19:44:36 +0800</pubDate><description><![CDATA[方法一：利用二级指针申请一个二维数组。





[objc] view
 plain copy


 print?



#include  
#include  
  
  
int main()  
{  
    intint **a;  //用二级指针动态申请二维数组  
    int i,j;  
    int m,n;  
    p]]></description><category></category></item><item><title><![CDATA[指定整数数组中输出和为一整数的所有组合]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53983641</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53983641</guid><author>guanyasu</author><pubDate>Mon, 02 Jan 2017 22:51:40 +0800</pubDate><description><![CDATA[题目：编写一个函数，在数组a[10] = {1,3,5,7,9,11,13,15,17}中输出和为25的所有整数组合


思想：递归，探底一种情况后返回前一种状态。
代码：
#include 
#include 

char a[10] = {1,3,5,7,9,11,13,15,17};
char b[10];

void f(int n)
{
	static int n1 = 0;
]]></description><category></category></item><item><title><![CDATA[实现strcpy得分点]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53794890</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53794890</guid><author>guanyasu</author><pubDate>Wed, 21 Dec 2016 23:58:42 +0800</pubDate><description><![CDATA[一个标准的strcpy函数：

原本以为自己对strcpy还算比较了解，结果面试时还是悲剧了。

下面给出网上strcpy的得分版本：

2分





void strcpy( char *strDest, char *strSrc )
{
　 while( (*strDest++ = * strSrc++) != '\0’ );
}






　　]]></description><category></category></item><item><title><![CDATA[int *ptr=(int *)(&a+1)]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53735263</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53735263</guid><author>guanyasu</author><pubDate>Mon, 19 Dec 2016 10:11:28 +0800</pubDate><description><![CDATA[int *ptr=(int *)(&a+1)(面试题)，有需要的朋友可以参考下。




【问题】：请写出以下程序的输出结果。




int main()
{
	int a[5]={1,2,3,4,5};
	int *ptr=(int *)(&a+1);
	printf("%d,%d\n",*(a+1),*(ptr-1));
}
【分析】：此题需要理解指针和数组的内在含义。]]></description><category></category></item><item><title><![CDATA[带缓冲的I/O操作和不带缓冲的I/O操作]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53731587</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53731587</guid><author>guanyasu</author><pubDate>Sun, 18 Dec 2016 23:58:50 +0800</pubDate><description><![CDATA[首先要明白不带缓冲的概念：所谓不带缓冲，并不是指内核不提供缓冲，而是只单纯的系统调用，不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲（在有些地方也被称为内核高速缓存），当用write函数对其写数据时，直接调用系统调用，将数据写入到块缓冲进行排队，当块缓冲达到一定的量时，才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能（但内核还是提供缓冲的）。每调用一次write或re]]></description><category></category></item><item><title><![CDATA[安全的终止正在运行的线程]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53717685</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53717685</guid><author>guanyasu</author><pubDate>Sat, 17 Dec 2016 23:59:01 +0800</pubDate><description><![CDATA[转自：[http://creator.cnblogs.com/]




最近开发一些东西，线程数非常之多，当用户输入Ctrl+C的情形下，默认的信号处理会把程序退出，这时有可能会有很多线程的资源没有得到很好的释放，造成了内存泄露等等诸如此类的问题，本文就是围绕着这么一个使用场景讨论如何正确的终止正在运行的子线程。其实本文更确切的说是解决如何从待终止线程外部安全的终止正在运行的线程
]]></description><category></category></item><item><title><![CDATA[TCP三次握手和四次挥手]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53649990</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53649990</guid><author>guanyasu</author><pubDate>Thu, 15 Dec 2016 00:04:20 +0800</pubDate><description><![CDATA[TCP是什么？

具体的关于TCP是什么，我不打算详细的说了；当你看到这篇文章时，我想你也知道TCP的概念了，想要更深入的了解TCP的工作，我们就继续。它只是一个超级麻烦的协议，而它又是互联网的基础，也是每个程序员必备的基本功。首先来看看OSI的七层模型：我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层，IP在第三层——Network层，ARP在第二层——Data]]></description><category></category></item><item><title><![CDATA[面试题]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53592354</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53592354</guid><author>guanyasu</author><pubDate>Tue, 13 Dec 2016 00:15:24 +0800</pubDate><description><![CDATA[char *getmemory(void)
{
char p[] = “hello world”;
return p;
}
void test(void)
{
char *str = NULL;
str = getmemory();
printf(“%s\n”,str);   
}
请问运行Test会有什么样的结果？
A. 出错
B. 输出“hello world”
C]]></description><category></category></item><item><title><![CDATA[Linux下的段错误分析]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53576890</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53576890</guid><author>guanyasu</author><pubDate>Sun, 11 Dec 2016 23:55:28 +0800</pubDate><description><![CDATA[2.
段错误产生的原因 
2.1 访问不存在的内存地址

#include
#include
void main()
{
int *ptr = NULL;
*ptr = 0;
}



2.2 访问系统保护的内存地址

#include
#include
void main()
{
int *ptr = (int *)0;
*ptr = 100;
}
]]></description><category></category></item><item><title><![CDATA[函数中返回字符串的方法]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53563905</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53563905</guid><author>guanyasu</author><pubDate>Sat, 10 Dec 2016 23:58:43 +0800</pubDate><description><![CDATA[有四种方式：

1。使用堆空间，返回申请的堆地址，注意释放

2。函数参数传递指针，返回该指针

3。返回函数内定义的静态变量（共享）

4。返回全局变量

 

******************以下摘自csdn******************************

 

其实就是要返回一个有效的指针，尾部变量退出后就无效了。 

使用分配的内存，地]]></description><category></category></item><item><title><![CDATA[字符串题目-strstr()]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53547555</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53547555</guid><author>guanyasu</author><pubDate>Fri, 09 Dec 2016 23:22:29 +0800</pubDate><description><![CDATA[字符串函数strstr(char *s1,char *s2)是返回字符串s1中首次出现s2的地址
函数实现：
char *my_strstr( char *s1, char *s2)
{
	if(*s2 == '\0')
	{	
		return NULL;
	}
		
	char *a = s1;
	char *b = s1;
	char *c = s2;
	
	while(*a != '\]]></description><category></category></item><item><title><![CDATA[费式数列]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53526763</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53526763</guid><author>guanyasu</author><pubDate>Thu, 08 Dec 2016 23:22:15 +0800</pubDate><description><![CDATA[Fibonacci为1200年代的欧洲数学家，在他的着作中曾经提到：「若有一只免子每个月生一只小免子，一个月后小免子也开始生产。起初只有一只免子，一个月后就有两只免子，二个月后有三只免子，三个月后有五只免子（小免子投入生产）......。 
如果不太理解这个例子的话，举个图就知道了，注意新生的小免子需一个月成长期才会投入生产，类似的道理也可以用于植物的生长，这就是Fibonacci数列，一般习惯]]></description><category></category></item><item><title><![CDATA[作式堆分析和实现]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53511943</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53511943</guid><author>guanyasu</author><pubDate>Wed, 07 Dec 2016 23:40:09 +0800</pubDate><description><![CDATA[介绍：

定义：





     左式堆（Leftist
 Heaps)又称作最左堆、左倾堆，是计算机语言中较为常用的一个数据结构。左式堆作为堆的一种，保留了堆的一些属性。第1，左式堆仍然以二叉树的形式构建；第2，左式堆的任意结点的值比其子树任意结点值均小（最小堆的特性）。但和一般的二叉堆不同，左式堆不再是一棵完全二叉树（Complete
 tree)，而且是一棵极不平衡的]]></description><category></category></item><item><title><![CDATA[二项队列分析及实现]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53488007</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53488007</guid><author>guanyasu</author><pubDate>Tue, 06 Dec 2016 16:00:39 +0800</pubDate><description><![CDATA[定义：





     二项队列不同于左式堆和二叉堆等优先队列的实现之处在于，一个二项队列不是一棵堆序的树，而是堆序树的集合，即森林。堆序树中的每棵树都是由约束形式的，叫做二项树。每一个高度上至多存在一棵二项树。高度为0的二项树是一颗单节点树，高度为k的二项树Bk通过将一棵二项树Bk-1附接到另一颗二项树Bk-1的根上而构成。下图显示二项树B0，B1，B2，B3以及B4。

]]></description><category></category></item><item><title><![CDATA[函数变相做到返回多个值的方法]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53471502</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53471502</guid><author>guanyasu</author><pubDate>Mon, 05 Dec 2016 23:25:01 +0800</pubDate><description><![CDATA[2方法1：利用全局变量 
　　 
　　分析：全局变量作为C语言的一个知识点，虽然我们都了解它的特点，但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束，而对于编写有多个返回值的C语言函数，我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时，全局变量被更改，我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。]]></description><category></category></item><item><title><![CDATA[字符串逆序(多种解法)]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53457924</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53457924</guid><author>guanyasu</author><pubDate>Sun, 04 Dec 2016 23:39:03 +0800</pubDate><description><![CDATA[普通逆序
基本上没有这么考的，放在这里主要是为了和后面的原地逆序做个对比。很简单，直接分配一个与原字符串等长的字符数组，然后反向拷贝一下即可。


char* Reverse(char* s)
{
    //将q指向字符串最后一个字符
    char* q = s ;
    while( *q++ ) ;
    q -= 2 ; 

    //分配空间，存储逆序后的字符串。]]></description><category></category></item><item><title><![CDATA[B-树详细分析及B树B-树B+树B*树概念]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53443142</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53443142</guid><author>guanyasu</author><pubDate>Sat, 03 Dec 2016 11:04:57 +0800</pubDate><description><![CDATA[B- 树是为了磁盘或其它存储设备而设计的一种多叉（下面你会看到，相对于二叉，B树每个内结点有多个分支，即多叉）平衡查找树。




B- 树又叫平衡多路查找树。一棵m阶的B 树 (m叉树)的特性如下：

树中每个结点最多含有m个孩子（m>=2）；除根结点和叶子结点外，其它每个结点至少有[ceil(m / 2)]个孩子（其中ceil(x)是一个取上限的函数）；若根结点不是叶子结点，则至]]></description><category></category></item><item><title><![CDATA[AVL树介绍与实现]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53440112</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53440112</guid><author>guanyasu</author><pubDate>Fri, 02 Dec 2016 22:51:01 +0800</pubDate><description><![CDATA[AVL树的介绍

AVL树是根据它的发明者G.M. Adelson-Velsky和E.M. Landis命名的。
它是最先发明的自平衡二叉查找树，也被称为高度平衡树。相比于"二叉查找树"，它的特点是：AVL树中任何节点的两个子树的高度最大差别为1。 (关于树的高度等基本概念，请参考"二叉查找树(一)之
 图文解析 和 C语言的实现 ")




上面的两张图片，左边的是AVL树，]]></description><category></category></item><item><title><![CDATA[char a[](字符串数组)和char *a(字符串指针)区别]]></title><link>https://blog.youkuaiyun.com/guanyasu/article/details/53428212</link><guid>https://blog.youkuaiyun.com/guanyasu/article/details/53428212</guid><author>guanyasu</author><pubDate>Thu, 01 Dec 2016 23:09:21 +0800</pubDate><description><![CDATA[在C语言中，对字符串的操作主要有两种方式，一是使用字符数组，char str[]；二是使用字符指针。那么二者有什么区别呢？下面将分述二者的使用，最后进行比较。




一、字符数组

        使用char str[]定义一个字符数组str，中括号内可以写上数字表示数组大小，也可以不写。如果不写数字，则必须为字符数组提供初始值，以便编译器进行内存分配。

可以使用字符串字面]]></description><category></category></item></channel></rss>