![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 80
lightd
爱生活,爱Coding!
展开
-
C语言的谜题
我们可以看到很多C语言相关的一些东西。比如《语言的歧义》主要告诉了大家C语言中你意想不到的错误以及一些歧义上的东西。而《谁说C语言很简单》则通过一些看似你从来不可能写出的代码来告诉大家C语言并不是一件容易事情。《6个变态的hello world》和《如何弄乱C的源代码》则以一种极端的方式告诉大家,不要以为咱们自己写不出混乱的代码,每个程序员其实都有把代码搞得一团乱的潜质。通过这些文章,相信你对编程转载 2014-01-02 16:02:31 · 833 阅读 · 0 评论 -
C语言和设计模式(桥接模式)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在以往的软件开发过程中,我们总是强调模块之间要低耦合,模块本身要高内聚。那么,可以通过哪些设计模式来实现呢?桥接模式就是不错的一个选择。我们知道,在现实的软件开发过程当中,用户的要求是多种多样的。比如说,有这么一个饺子店吧。假设饺子店原来只卖肉馅的饺子,可是后来一些吃素的顾客转载 2014-02-17 09:07:46 · 909 阅读 · 0 评论 -
C语言和设计模式(抽象工厂模式)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们写过的工厂模式实际上是对产品的抽象。对于不同的用户需求,我们可以给予不同的产品,而且这些产品的接口都是一致的。而抽象工厂呢?顾名思义,就是说我们的工厂是不一定的。怎么理解呢,举个例子。 假设有两个水果店都在卖水果,都卖苹果和葡萄。其中一个水果店买转载 2014-02-17 09:10:25 · 1198 阅读 · 0 评论 -
mmap把文件映射到内存
我曾经用过的源代码-mmap把文件映射到内存作者: 周立发2008-01-27 19:08分类:默认分类标签:应一些朋友的要求,我把我电脑上的源代码全部张贴到这里。当然稍微做些说明。这样有个好处就是我自己可以通过google随时搜索源代码例子,比如我想找udp编程的例子时,我就在google里输入:udp site:zhoulifa.bokee.com搜索,能看到我自己的源代码转载 2014-03-31 18:55:58 · 824 阅读 · 0 评论 -
实现自己的printf函数(转载)
在嵌入式开发中,常常会通过串口打印一些信息到PC终端,这就需要实现自己的printf函数,下面介绍打印函数print的实现。print.h转载 2014-04-15 16:41:52 · 714 阅读 · 0 评论 -
fork与vfork的区别
fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork ( ):子进程与父进程共享数据段 2. fork ()父子进程的执行次序不确定 vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec 或exit转载 2014-03-22 14:31:42 · 598 阅读 · 0 评论 -
一个简单高效的循环缓冲区的管理代码
一个简单高效的循环缓冲区的管理代码,与平台无关,可以方便在各种场合使用。-A simple and efficient management of the cycle of the buffer zone code, and platform-independent, it will be convenient to use on various occasions.转载 2014-04-19 20:09:45 · 1122 阅读 · 0 评论 -
实现Linux下带进度显示的cp命令 - xcp
实现Linux下带进度显示的cp命令 - xcp作者:阙荣文 - Q++ StudioLinux下复制文件的命令cp非常强大,就是有一点不是很好:没有进度提示。尤其是在复制很多大文件时,控制台仅仅停在那里什么信息都没有让人非常不爽。当然可以通过shell脚本实现进度提示,不过我喜欢直接一点的方式:用C程序解决。1.遍历想要知道进度首先要统计源转载 2014-04-10 18:14:20 · 71464 阅读 · 7 评论 -
哈希表
散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录转载 2014-04-11 21:59:21 · 950 阅读 · 0 评论 -
计算机程序是怎样运行的
关于《深入理解计算机系统》“这本书的中译名为“深入理解计算机系统”,我非常,十分,以及百分之一百二十地不满意。我这么说的原因在于这个译法完全扭曲了书的本意。如果直译原书名,应该是类似于“以程序员的视角理解计算机系统”,何来“深入”二字。可能在国内编辑看来,这是讲系统的,用C和汇编语言的,因此很“深入”,但我认为这只能说明国内技术氛围的浅薄。因为事实上,这是一本入门级别的书,这本书其实并不“转载 2014-04-11 22:01:28 · 36706 阅读 · 0 评论 -
一个 Linux 上分析死锁的简单方法
一个 Linux 上分析死锁的简单方法本文主要介绍一种在 Linux 上分析死锁问题的简单方法。主要介绍死锁的基本概念,以及如何使用 pstack 和 gdb 对死锁问题进行分析。转载 2014-08-22 20:52:36 · 1639 阅读 · 0 评论 -
A*算法入门
在看下面这篇文章之前,先介绍几个理论知识,有助于理解A*算法。 启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提到了效率。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。估价函数:从当前节点移动到目标节点的预估费用;这个估计就是启发式的。在寻路问题和迷宫问转载 2014-08-22 19:25:45 · 703 阅读 · 0 评论 -
利用huffman编码实现压缩文件
哈夫曼是一种常用的压缩方法。是1952年为文本文件建立的,其基本原理是频繁使用的数据用较短的代码代替,很少使用的数据用较长的代码代替,每个数据的代码各不相同。这些代码都是二进制码,且码的长度是可变的。如: 有一个原始数据序列,ABACCDAA则编码为A(0),B(10),C(110),(D111),压缩后为010011011011100。 产生霍夫曼编码需要对原始数据扫描两遍,第一遍扫描转载 2014-10-15 16:03:57 · 11211 阅读 · 9 评论 -
一个Sqrt函数引发的血案
我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢?虽然有可能你平时没有想过这个问题,不过正所谓是“临阵磨枪,不快也光”,你“眉头一皱,计上心来”,这个不是太简单了嘛,用二分的方法,在一个区间中,每次拿中间数的平方来试验,如果大了,就再试左区间的中间转载 2014-11-18 08:40:11 · 17588 阅读 · 2 评论 -
LZSS算法
昨天看了下LZSS.C,就是那个4/6/1989 Haruhiko Okumura的经典代码。 很久没有研究算法了,又没有详细的描述,只能从代码和注释里面去理解。还真花了我不少时间。 首先讲解压,LZSS的编码是1 byte的flag,从低到高,如果bit=1,原样输出1 byte,如果bit=0,读取2 byte,输出长度和缓冲区位置保存在这2 byte中。 其实标准的转载 2014-11-20 20:17:20 · 17437 阅读 · 1 评论 -
[置顶] 亲,这就是遗传算法
本文试图通过几幅简明的图来介绍遗传算法。背景当一些问题不存在确定性的最优解法,或者说最优解法的施展时间长的1-B,那我们就得开始考虑点其他路子了。比如说旅行商问题:旅行商要去很多城市卖货,为了节省时间,它一个城市只去一次,最后还得返回原城市,因为他老婆不允许他离开太久。 它怎么走比较合算?城市的分布可能会像下面这样: 旅行商会想就是把转载 2015-05-10 15:12:38 · 3155 阅读 · 2 评论 -
一道试题引发的血案
某日,看到一道比较恶心的C语言的试题,考了很多比较绕的知识点,嘴脸如下:int main(void){ int a[4] = {1, 2, 3, 4}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x, %x/n", ptr1[-1], *p转载 2015-05-20 18:13:39 · 885 阅读 · 0 评论 -
命令行下的树形打印
命令行下的树形打印 最近在处理代码分析问题时,需要将代码的作用域按照树形结构输出。问题的原型大概是下边这个样子的。图中给了一个简化的代码片段,该代码片段包含5个作用域:全局作用域0、函数fun作用域1、if语句作用域2、else语句作用域3和函数main作用域4。代码作用域有个显著的特点就是具有树形结构,全局作用域作为树根,函数作用域则是其子节点,而局部作用域则是函转载 2013-12-30 13:52:05 · 1378 阅读 · 0 评论 -
C语言经典算法100例(二)
11.判断某一年是否是闰年。[cpp] view plaincopy//判断某一年份是否是闰年 int IsLeapYear(int year) { return (year % 400 == 0 || (year % 4 == 0) && (year % 100 != 0)); } 运行结果:转载 2013-11-14 13:47:08 · 1050 阅读 · 0 评论 -
另一种求大数阶乘的算法
大数阶乘 问题描述:编写程序,对给定的n(n 注意:如果要求一个5的阶乘,用整型可以存储,求10的阶乘可以用长整型表示,但若要求100的阶乘,就无法用长整型表示,此时就必须考虑别的方法。 要求的k!的值,必定已求得(k-1)!的值,依次地推,当 k = 2时,要求的1! = 1为已知。求得(k-1)!的值后,对(k-1)!连续累加k-1此后即可求得K!值转载 2013-11-14 13:50:03 · 1010 阅读 · 0 评论 -
数字图像处理_高斯噪声_纯C
loadbmp.h#include #include #include #include #include #define pi (double)3.14159265359#define BI_RGB 0#define BI_RLE8 1#define BI_RLE4 2#define BI_BITFIELDS 3typede原创 2012-11-10 18:24:53 · 3220 阅读 · 2 评论 -
快速排序
#include #define TRUE 1#define FALSE 0typedef unsigned char BOOL;typedef unsigned int UINT;void quick_sort(UINT*, UINT, UINT);void print_arr(UINT*, UINT);int main(int argc,原创 2012-11-08 18:06:27 · 357 阅读 · 0 评论 -
冒泡排序
#include #define TRUE 1#define FALSE 0typedef unsigned char BOOL;typedef unsigned int UINT;void bubble_sort(UINT*, UINT);void print_arr(UINT*, UINT);int main(int argc, char*原创 2012-11-08 17:49:31 · 420 阅读 · 0 评论 -
C语言经典算法100例(一)
C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的、更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础。 接下来我们先来看10道: (1)输出9*9乘法口诀。 [cpp] view plaincopy//9*9乘法口诀表 void转载 2013-11-14 13:45:55 · 1179 阅读 · 0 评论 -
数字图像处理_椒盐噪声_纯C
loadbmp.h#include #include #include #include #include #define pi (double)3.14159265359#define BI_RGB 0#define BI_RLE8 1#define BI_RLE4 2#define BI_BITFIELDS 3typede原创 2012-11-10 18:17:11 · 3474 阅读 · 0 评论 -
图示指针
指针,应该说指针类型,是一种数据类型,像int类型,char类型,short类型等基础数据类型一样,它定义了一种指向数据地址的数据类型。而定义数据类型的目的,是让编译程序在编译代码时,给相应的数据类型分配数据空间,比如,定义一个变量 int a;则编译程序编译时会给变量a分配连续4字节的内存地址(通常使用的环境),而a变量的地址则指向这4个字节的首地址,这连续的4字节就可以存储0x0~0xff转载 2012-11-21 08:26:35 · 563 阅读 · 0 评论 -
c语言面试题-----指针篇
1. char * const p; char const * p const char *p 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p------------------转载 2012-12-13 17:15:17 · 944 阅读 · 1 评论 -
关于日期的常用算法
关于日期的常用算法有很多,但如果掌握了基本的算法,难一点的可以分解为简单的,各个击破。1)判断一年是否为闰年:[java] view plaincopy//判断一年是否为闰年 static boolean IsLeapYear(int year){ return (year % 400 == 0 || ye转载 2013-11-14 13:51:58 · 1148 阅读 · 0 评论 -
遗传算法_求最大值
/************************************************************* 人工智能--遗传算法**** 求解f (x) = x2 的最大值,x∈ [0,31]** ** author: CS0921 WTU**原创 2012-11-08 11:06:43 · 9083 阅读 · 3 评论 -
typedef的四个用途和两个陷阱
用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量转载 2012-11-14 09:04:10 · 385 阅读 · 0 评论 -
大整数相加
在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。比如下面问题:9876543210 + 1234567890 =?让字符串 num1 = "9876543210",字符串 n转载 2012-12-01 15:12:44 · 452 阅读 · 0 评论 -
C语言编译模式
编译模式是指如何在内存中放置程序代码及数据,如何分配堆栈,并确认占用的内存大小及如何存取它们,当指定内存模式(编译模式)以后,语言编译程序将按事先选择好的内存模式编译组织程序。 C 语言中提供了6种编译模式,这6种模式是:微模式(Tiny),小模式(Small),中模式(Medium),紧凑模式(Compact),大模式(Large)和巨模式(Huge)。它们之间的关系如下图所示。用户转载 2012-12-12 19:17:55 · 1212 阅读 · 1 评论 -
计算任意位数的Pi
当用程序实现求pi的值时,也许你能够很快写出算法(利用求pi的几个公式),但是由于使用单变量保存结果,限于计算机硬件对变量的表示范围有限,因此,最多只能计算出pi值小数点后十多位。但需要得到一个更大位数的pi值时,就得考虑其他的算法。 我们采用这个公式计算pi: pi/2 = 1+1/3+1/3*2/5 + 1/3*2/5*3/7 + 1/3*2/5*3/7*4/9+......转载 2013-11-14 13:58:01 · 3223 阅读 · 0 评论 -
memcpy和memmove的区别
memcpy()和memmove()都是C语言中的库函数,在头文件string.h中,其原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count);它们都是从src所指向的内存中复制count个字原创 2012-11-07 18:41:10 · 376 阅读 · 0 评论 -
数字图像处理_真彩图转换灰度图_纯C
头文件见软件开发其他关于数字图像处理中loadbmp.hnocolor.c#include "loadbmp.h"void NoColor(){ int x,y,p; BYTE Point; if (lpBitmap==0) return; for(y=0;y<nHeight;y++) for(x=0;x<nWidth;x++) { p=原创 2012-11-10 18:31:21 · 3472 阅读 · 0 评论 -
_FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程)
先看下简单的初始代码:注意其编译运行后的结果。root@xuanfei-desktop:~/cpropram/2# cat global.h //头文件#ifndef CLOBAL_H#define GLOBAL_H#include int funca(void);int funcb(void);#endifroot@xuanfei-desktop:~/cpro转载 2012-11-23 08:45:14 · 671 阅读 · 0 评论 -
C语言经典算法100例(三)
1.河内之塔说明河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有转载 2013-11-14 13:48:34 · 1060 阅读 · 0 评论 -
Member Function Pointers and the Fastest Possible C++ Delegates
http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-PossibleA comprehensive tutorial on member function pointers, and an implementation of delegates that gene转载 2015-06-17 10:23:50 · 1788 阅读 · 0 评论