<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wp1995的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wp1995</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wp1995]]></copyright><item><title><![CDATA[语句if]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53544131</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53544131</guid><author>wp1995</author><pubDate>Fri, 09 Dec 2016 21:33:14 +0800</pubDate><description><![CDATA[目前我们写的简单函数中可以有多条语句，但这些语句总是从前到后顺序执行的。除了顺序执行之外，有时候我们需要检查一个条件，
然后根据检查的结果执行不同的后续代码，在c语言中可以用分支语句实现。例如：


if(x != 0)
{
    printf("x is nonzero.\n");
}
其中，“x != 0"表示x不等同于0的条件，这个表达式称为控制表达式，如果条件成立，则执行]]></description><category></category></item><item><title><![CDATA[常量指针和指针常量]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53511076</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53511076</guid><author>wp1995</author><pubDate>Wed, 07 Dec 2016 22:28:55 +0800</pubDate><description><![CDATA[指针常量与常量指针是c语言中两个比较容易混淆的概念。
  (1)const char *p;
  (2)char * const p = a;
  (3)cahr * p = "abc";


语句（1）定义了一个常量指针，即指向一个常量的指针，指向的内容是常量，不可修改，放在常量区的，但指针本身可以被修改，即“*p = 'b'”是非法的，
*p 是p指向的常量的第一个字符，是个常量]]></description><category></category></item><item><title><![CDATA[针对文件流的几个常见函数]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53470464</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53470464</guid><author>wp1995</author><pubDate>Mon, 05 Dec 2016 21:43:42 +0800</pubDate><description><![CDATA[1.fopen:
函数的功能：
打开文件（基于标准I/O文件）

函数的原型：
FILE * fopen(const char *path,const char *mode)

函数的参数：
path:打开的文件路径或文件名
mode:表示流行态，其中有以下几种情况：
（1）r:打开只读文件，该文件必须存在
（2）r+:打开读写文件，该文件必须存在
（3）w:打开只写文件，]]></description><category></category></item><item><title><![CDATA[不带缓存的文件操作用到的几个的函数]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53455609</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53455609</guid><author>wp1995</author><pubDate>Sun, 04 Dec 2016 18:25:34 +0800</pubDate><description><![CDATA[不带缓存的文件I/O操作，主要用到6个函数--creat,open,read,write,lseek,close.
这里的不带缓存是指每一个函数都只调用系统中的函数，这些函数虽然不是ANSI C
的组成部分，但却是POSIX的组成部分。
下面就来介绍一下这几个函数：
1.creat:
函数的作用:
创建文件；
函数原型：
int creat(const char *pathname]]></description><category></category></item><item><title><![CDATA[数组和链表]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53447542</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53447542</guid><author>wp1995</author><pubDate>Sat, 03 Dec 2016 20:52:10 +0800</pubDate><description><![CDATA[1.数组：
数组是将元素在内存中连续存放，由于每个元素占用内存相同，可以通过下标迅速访问数组中任何元素。但是如果要
在数组中增加一个元素，需要移动大量元素，在内存中空出一个元素的空间，然后将要增加的元素放在其中。同样的
道理，如果想删除一个元素，同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据，很少插入和
删除元素，就应该用数组。
2.链表：
链表中的元素在内存中不是顺]]></description><category></category></item><item><title><![CDATA[常见的内存错误和对策]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53437271</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53437271</guid><author>wp1995</author><pubDate>Fri, 02 Dec 2016 18:18:16 +0800</pubDate><description><![CDATA[编程时遇到内存错误是一件很麻烦的事。因为编译器不能自动发现这些错误，通常是在程序运行时才能捕捉到，而这些错误大多没有明显的症状，时隐时现，增加了改错的难度。


常见的内存错误及其对策如下所示：


（1）内存分配并未成功，但还是使用了它。初学者经常犯这个错误，因为并没有意识到内存分配也有可能不成功。
         常用的解决办法是，在使用内存之前检查是否为NULL，如果指针p是]]></description><category></category></item><item><title><![CDATA[定义和声明]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53426394</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53426394</guid><author>wp1995</author><pubDate>Thu, 01 Dec 2016 20:38:46 +0800</pubDate><description><![CDATA[定义：


什么是定义？所谓的定义就是（编译器）创造一个对象，为这个对象分配一块内存并给它取上一个名字，这个名字就是我们常常说的定义名或对象名。
但注意，这个名字一旦和这块内存匹配起来（可以想象是这个名字嫁给了这块空间，没有要彩礼啊），它们就生死与共，终生不离不弃，并且这块内
存的位置也不能被改变。一个变量或对象在一定区域内（如函数，全局）只能被定义一次，如果定义多次，编译器会提示你重复]]></description><category></category></item><item><title><![CDATA[typedef和#define的问题]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53414133</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53414133</guid><author>wp1995</author><pubDate>Wed, 30 Nov 2016 21:45:22 +0800</pubDate><description><![CDATA[在使用typedef和#define时，我们会发发现他们存在一些相似。
有些时候我们会想到底用什么比较好呢？
通常讲，typedef比#define好，特别是在有指针的场合。
例如有两种定义p_str数据类型的方法如下：
typedef  char *p_str;
#define p_str2 char*;
p_str1 s1, s2;
p_str2 s3,s4;


在上述的]]></description><category></category></item><item><title><![CDATA[volatile关键字]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53400780</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53400780</guid><author>wp1995</author><pubDate>Tue, 29 Nov 2016 22:08:22 +0800</pubDate><description><![CDATA[volatile和static,const等常见的关键字一样也是一个类型修饰符，它主要用来修饰被不同线程访问和修改的变量。
如果不加它，有时候就会发生无法编写多线程程序或者无法编写多线程程序。
volatile 告诉编译器i是随时可能发生变化的，每次使用它的时候必须从变量的地址中读取，因而编译器生成的可执行码会重新从变量的地址读取数据进行操作。 

volatile 影响编译器编译的结果,]]></description><category></category></item><item><title><![CDATA[malloc，calloc,ralloc]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53385072</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53385072</guid><author>wp1995</author><pubDate>Mon, 28 Nov 2016 21:28:27 +0800</pubDate><description><![CDATA[在内存中的4g划分中堆空间就是专门存放malloc,calloc,ralloc这几个分配空间的函数，下面就简单介绍一下他们的区别：


1.malloc()
（1）函数原型
void *malloc(unsigned int num_bytes);

（2）功能
请求系统动态分配num_bytes个字节的空间，如果分配成功则返回第一个字节的地址，并且可以进行强制类型转换，告诉系统分]]></description><category></category></item><item><title><![CDATA[顺序栈和链栈]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53366134</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53366134</guid><author>wp1995</author><pubDate>Sun, 27 Nov 2016 19:26:14 +0800</pubDate><description><![CDATA[顺序栈：


#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初]]></description><category></category></item><item><title><![CDATA[链表的操作]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53354010</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53354010</guid><author>wp1995</author><pubDate>Sat, 26 Nov 2016 19:31:06 +0800</pubDate><description><![CDATA[今天学到了链表的知识，学会链表的一些简单的应用，实现链表的初始化，插入，删除和访问，还有判断是否为空和清除数据。。。。
程序如下：
#include "stdio.h"    
#include "string.h"
#include "ctype.h"      
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#in]]></description><category></category></item><item><title><![CDATA[一道智力游戏趣味编程题]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53339547</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53339547</guid><author>wp1995</author><pubDate>Fri, 25 Nov 2016 20:01:33 +0800</pubDate><description><![CDATA[题目如下：
一副扑克有52张牌，打桥牌时应该把牌分配给四个人，请先设计程序模拟发牌的过程。
要求：黑桃用S（SPACES）表示；红桃用H（HEART)表示；方块用D（diamond）表示；梅花用C（CLUBS）表示；
问题分析：
按照打桥牌的规则，每人应该发到13张牌，在人工发牌时，应该先进行“洗牌”，再把牌按一定的顺序发给每一个人。为了方便计算机进行模拟，
可以将人工发牌的方式进行修改]]></description><category></category></item><item><title><![CDATA[一道辗转相除的题]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53325756</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53325756</guid><author>wp1995</author><pubDate>Thu, 24 Nov 2016 20:36:44 +0800</pubDate><description><![CDATA[「辗转相除法」又叫做「欧几里得算法」,是公元前
 300 年左右的希腊数学家欧几里得在他的著作《几何原本》提出的.利用这个方法,可以较快地求出两个自然数的最大公因数,即 HCF 或叫做 gcd.所谓最大公因数,是指几个数的共有的因数之中最大的一个,例如 8 和 12 的最大公因数是 4,记作 gcd(8,12)=4.


#include    
  
int main()  
{  
 ]]></description><category></category></item><item><title><![CDATA[头文件]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53312001</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53312001</guid><author>wp1995</author><pubDate>Wed, 23 Nov 2016 21:13:34 +0800</pubDate><description><![CDATA[虽然我们经常会使用头文件，不过也只是用多了，其实很多时候都并不够了解。我们知道编译过程中的预处理阶段会进行头文件展开，宏替换以及条件编译。那么什么是头文件呢？
百度百科是这样定义的：头文件作为一种包含功能函数、数据接口声明的载体文件，主要用于保存程序的声明(declaration)，而定义文件用于保存程序的实现 (implementation)。 .c就是你写的程序文件。
其实我一开始对头文件]]></description><category></category></item><item><title><![CDATA[怎么编写简单程序判断电脑是大端cpu还是小端cpu]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53290589</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53290589</guid><author>wp1995</author><pubDate>Tue, 22 Nov 2016 19:51:30 +0800</pubDate><description><![CDATA[电脑的cpu有两种，大端和小端cpu。
大端cpu：
所谓的大端，是指数据的高字节，保存在内存的低地址中，而数据的低字节，保存在内存的高地址中，这样的存储模式有点儿类似于把数据当作字符串顺序处理：地址由小向大增加，而数据从高位往低位放；
小端：
所谓的小端，是指数据的高字节保存在内存的高地址中，而数据的低字节保存在内存的低地址中，这种存储模式将地址的高低和数据位权有效地结合起来，高地址部分]]></description><category></category></item><item><title><![CDATA[几种常见的关键字]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53263519</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53263519</guid><author>wp1995</author><pubDate>Mon, 21 Nov 2016 20:10:29 +0800</pubDate><description><![CDATA[一.register：修饰寄存器变量；
作用：请求编译器尽可能的将变量存在cpu内部寄存器中。
优点：减少了cpu从内存中抓取数据的时间，可以提高程序的执行效率；
适用对象：频繁访问的变量用register修饰，例如循环变量等；
注意事项：
1.register只能修饰局部变量，不能修饰函数和全局变量；
2.不能用&来获取被register修饰的变量的地址，因为该变量可能不是在内存中存]]></description><category></category></item><item><title><![CDATA[结构体造成的内存空洞]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53244272</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53244272</guid><author>wp1995</author><pubDate>Sun, 20 Nov 2016 20:57:35 +0800</pubDate><description><![CDATA[实际编程时，经常需要处理批量数据，对于同类型的数据，我们可以使用数组来保存，但是如果是对不同类型数据进行批量处理，这就需要结构体了；


结构体给我们变成带来了很多便利，但是它也有自身的缺陷：那就是容易造成内存空洞。


首先我们来看一下下面的程序：


#include 

struct node            //noid为结构体名 
{
	char ch1;
	
	]]></description><category></category></item><item><title><![CDATA[c语言命名标准]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53234164</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53234164</guid><author>wp1995</author><pubDate>Sat, 19 Nov 2016 20:43:55 +0800</pubDate><description><![CDATA[为提高代码的可读性，好的命名是很重要的。
1.而比较著名的命名规则首推匈牙利命名法，这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。
 
其主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。匈牙利命名法关键是：标识符的名字以一个或者多个小写字母开头作为前缀；前缀之后的是首字母大写的
一个单词或多个单词组合，该单词要指明变量的用途]]></description><category></category></item><item><title><![CDATA[curses--图形函数库]]></title><link>https://blog.youkuaiyun.com/wp1995/article/details/53223379</link><guid>https://blog.youkuaiyun.com/wp1995/article/details/53223379</guid><author>wp1995</author><pubDate>Fri, 18 Nov 2016 20:54:44 +0800</pubDate><description><![CDATA[前几天遇到一个问题要求从键盘输入密码，使用scanf函数，但是密码不显示出来，取而代之的是输出*；
百度的时候终于知道这个问题的主要就是要关闭回显，一般我们从键盘用scanf输入数据时，终端会把这个数据显示在频幕上，很明显当我们要输入密码时，这种功能是有必要去除的，所以就要关闭回显，只要输出一个*就好了。
而关闭回显就要使用curses这个图形函数库。（Linux和unix系统下）
首先我们]]></description><category></category></item></channel></rss>