自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小_鱼的专栏

男儿立志出乡关,学不成名誓不还。埋骨何须桑梓地,人生无处不青山!

  • 博客(231)
  • 收藏
  • 关注

转载 operator->重载问题总结(转)

operator->重载问题总结   编写程序的时候,想让一个对象表现的像一个指针,因此需要重载->运算符。因此写下了如下的代码。由于全部贴出程序比较多,用简化的代码说明一下:class A{ public:     int i;    A(){i = 100;}     void print(int a){printf("%d/n", a);}    A& o

2014-10-18 21:40:40 618

原创 将一个整型变量转换为字符串

#include void itoc(char *str,int n);int count=0;int main(){        char str[10];        int n=1234;        itoc(str,n);        str[count]='\0';        printf("%s\n",str);        re

2014-06-23 22:53:36 1199

原创 将一个字符串逆序输出

首先我们用一个小程序1+2+3+4+5=15这个小程序用递归的方法求出来: /* 目的:为了清楚的分析递归方法在执行中的顺序,应用到具体的程序当中*/#include int s(int n);int main(void){     int n = 5;         printf("结果是:%d\n",s(n));         retur

2014-06-23 22:52:45 2680

原创 自写strcpy函数

/*     目的:完成从一个字符串*src,拷贝前n个字符到另一个字符数组*dest中*/#include  #include void mystrcpy(char *src , int length , char *dest){     int len = 0;     while(*src != '\0' && len      {      

2014-06-23 22:51:42 739

转载 十道一般人无法及格的C语言试题

1、对下述代码说法正确的是: 对下述代码说法正确的是: ( #include  int main(void) {  char aChar;  int aInt;  aInt = aChar = -120;  printf("%d\n", aInt);  return 0; } A、 一定输出-120 。 B、一定不能输出-120 。 C、可能输出-120。

2014-06-23 22:50:40 2034 1

转载 找出两个字符串中最大公共子字符串,如"abccade"、"dgcadde"的最大子串为"cad"

//// 此题用for能控制循环int GetCommon(char *s1, char *s2, char **r1, char **r2) {  int len1 = strlen(s1);  int len2 = strlen(s2);  int maxlen = 0;  for(int i = 0; i  {  for(int j = 0; j

2014-06-23 22:49:54 905

原创 一个字符串IP分割的处理小程序

#include #include #include unsigned int ip_list(char *str);int main(int arg,char **argv){    unsigned int ip_array[3];    int i;if(argc {print

2014-06-23 22:48:26 1816

转载 C语言读取配置文件

/*程序功能:获取配置文件中的IP字符串  程序目的:记录下来,免得以后重写了,不如意地方以后再改*/#include #include #include #include int etc_file(char *file,char *buffer);//读取配置文件int cut_ip(char *,char **);//分割并获

2014-06-23 22:47:40 836

转载 库、连接、装载

1.什么是库 在windows平台和linux 平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux 的本质不同,因此二者库的二进制是不兼容的。 本文仅限于介绍linux 下的库。 2.库的种类 linux 下的库有两种:静态库和共享库(动态库)。 二者的不同点在于代码被载入的时刻不同。 静态

2014-06-23 22:46:07 440

转载 C语言内部静态成员陷阱

在C语言中,我们知道当函数返回时,其栈上的内存会随着函数出栈而释放,但是我们有时需要返回一块函数内部可以处理,而函数外面仍然有效的内存。大体来说有如下几种方法:1)在函数内部通过malloc在堆上分配内存,然后把这块内存返回。但是这将带来潜在的安全隐患,如内存泄露或多次释放导致程序崩溃。2)由函数外部传入一块内存,函数内部的数据处理可以在该内存块上完成。让内存由外部程序维护,比较简

2014-06-23 22:44:54 493

转载 可变参函数

在C语言中,函数参数的传递方式有值传和址传.值传是把实参的一个专用的、临时的复制值给被调函数中相应的形参被调用函数使用、修改这个传来的复制值,不会影响实参的值.址传则是把变量(实参)的地址传给被调函数.被调函数通过这个地址找到该变量的存放位置,直接对该地址中存放的变量的内容进行存取操作.因此,在被调用函数中可以修改实参的值.这也是函数参数址传的优点.无论是值传还是址传,都要求实参的数目及类型与形参

2014-06-23 22:43:52 434

原创 自写的检查处理器 大小端模式

思想:将int型转化为char型#include #include int main(){int i=1;char *p=(char *)&i;int a=strlen(p);if(a==0)printf("大端模式\n");else printf("小端模式\n");}当然也可以像下一篇日志  用

2014-06-10 22:29:23 437

转载 int型数组强制转换为char*,再求strlen,涉及大小端

一道有趣的面试题——将int型数组强制转换为char*,再求strlen,涉及大小端 (转)  #include        #includeint main(){int a[2000];char *p = (char*)a;for( int i = 0; i a[i] = -1 - i;printf( "%d\n", strlen(p));

2014-06-10 22:28:27 3420

转载 float类型精度损失问题

float范围为: 32 3.4E–038~3.4E+038double范围为: 64 1.7E–308~1.7E+308#include     #define EPSILON 0.0001     // Define your own tolerance#define FLOAT_EQ(x,v) (((v - EPSILON) int main() {     

2014-06-10 22:27:26 2398 1

转载 马的走法问题

一个4×5的棋盘,输入马的起始坐标,求马能返回初始位置的所有不同走法的总数(马走过的位置不能重复,马走“日”字)。 思想:递归、有时用数组列出全部元素也是个方法、全局变量初始化为0#include using namespace std;const int ROWS = 4;//行数const int COLUMS = 5;//列数

2014-06-10 22:26:32 662

原创 linux系统调用和库函数调用的区别

Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。可以参考《Linux程序设计》(英文原版为《Beginning Linux Programming》,作者是Neil Matthew和Richard Stones)第三章: Working with files。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底

2014-06-10 22:25:44 483

转载 C语言程序中不同的存储区域

BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通

2014-06-10 22:24:58 534

转载 C++值传递,指针传递,引用传递

值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。指针传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作引用传递:形参相当于是实参的“别名”,对形参的操作其

2014-06-10 22:24:07 381

转载 数组和指针区别

什么时候数组和指针相同(When an Array Is a Pointer )在实际应用中,他们可以互换的情形要大大多于不能互换的情形。首先再回顾一下声明和定义,(上一篇中有提到这里在深入一下)声明本身还可以进一步分为三种情况:1)外部数组的声明(external array)2)数组的定义(它是声明的一种特殊情况,它分配内存空间,并可能提供一个初值)3)

2014-06-10 22:22:45 441

转载 双重指针与2维数组

void Func1(int *p){}void Func2(int a[]){}int main(){  int a[10];  Func1(a);  int *p;  Func2(p);}    即一维数组与指针作为函数参数的互换使用, 我们可以一眼看出这个程序是可以通过编译的.    a是数组a[10]第一个元素的地址,

2014-06-10 22:22:00 2522

转载 数组作与指针做参数比较

C语言中的数组可分为一维数组和多维数组两类,而多维数组中又以二维数组最为常见。这里也仅针对这一维数组和二维数组作简要说明。高质量C++编程指南中指出当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针,这句话针对一维数组是正确的(目前个人认为是正确的),但是对于多维数组,这显然不完全正确。C语言之所以把数组形参当作指针是出于效率考虑,如果把一个数组全部拷贝这样势必带来性能上的损失,

2014-06-10 22:20:43 513

转载 TCP和UDP的"保护消息边界" 机制

在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。       对于UDP

2014-06-10 22:19:51 1144

转载 一步一步写makefile

概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefil

2014-06-10 22:18:43 402

转载 C技巧:结构体参数转成不定参数

下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏“__VA_ARGS__”,下面这段程序可以在GCC下正常编译通过:1234567891011121314151617181920#include  #def

2014-06-10 22:16:36 632

转载 C语言的谜题

语言的歧义 [酷壳链接] [CSDN链接]谁说C语言很简单? [酷壳链接] [CSDN链接]6个变态的C语言Hello World程序 [酷壳链接] [CSDN链接]如何加密/弄乱C源代码 [酷壳链接] [CSDN链接]C语言的谜题 [酷壳链接] [CSDN链接]1、下面的程序并不见得会输出 hello-std-out,你知道为什么吗?#include

2014-06-10 22:12:57 379

转载 Linux下使用doxygen自动生成注释和文档

一、    安装工具1.   获取DoxygenToolkit.vim插件下载地址:http://www.vim.org/scripts/script.php?script_id=987将其拷贝到如下目录:/usr/share/vim/vim72/plugin/2.   获取doxygen-1.8.2.src.tar.gz源码包该工具用于生成文档和注释,可以从其官网上获取:

2014-06-10 22:11:02 1521

转载 字符串转换成整数&带通配符的字符串匹配问题

先看题目:输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345。请完成函数StrToInt,实现字符串转换成整数的功能,不得用库函数atoi。    我们来一步一步分析,直至写出第一份准确的代码:1、本题考查的实际上就是字符串转换成整数的问题,或者说是要你自行实现atoi函数。那如何实现把表示整数的字符串正确地转换成整数呢

2014-06-10 22:09:49 946

转载 位域

位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字

2014-06-10 22:07:16 358

转载 C经典题型

1.    struct node    {            char a[10];            int b;    } p[4];A p->b=2        B  p[0].a="abc" (把字符串赋给地址)     C  p[0]->b=2        D  p->a='b'正确:p[0].b=1;    错误:p.b=1;     

2014-06-10 22:06:16 399

转载 AI-迷宫寻路算法-深度优先搜索和广度优先搜索

状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程。通俗点说,就是在解一个问题时,找到一条解题的过程可以从求解的开始到问题的结果(好象并不通俗哦)。由于求解问题的过程中分枝有很多,主要是求解过程中求解条件的不确定性,不完备性造成的,使得求解的路径很多这就构成了一个图,我们说这个图就是状态空间。问题的求解实际上就是在这个图中找到一条路径可以从开始到结果。这

2014-06-10 22:01:55 1982

转载 A*算法原理

广度优先搜索和深度优先搜索都属于盲目型搜索算法,在选择下一个搜索节点的时候没有一个准则,去选择最优的。很多情况下需要会穷举整个空间,因此只适用于规模较小的搜索。因此需要用到另外一种算法---启发式搜索。一、A*算法原理启发式搜索就是在状态空间中对每一个搜索位置进行评估,得到最好的位置,再从这个位置进行搜素直到目标。这样可以省略大量无谓的搜索路径。

2014-06-10 22:00:24 8511

转载 #ifdef _cpluscplus

看一些程序的时候老是有“#ifdef __cplusplusextern "C" {#endif”的定义,搞搞清楚是怎么回事:Microsoft-Specific Predefined Macros__cplusplus Defined for C++ programs only. 意思是说,如果是C++程序,就使用extern "C"{而这个东东,

2014-04-13 13:58:37 2408

转载 C++初始化与赋值 区别

先来个区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情 况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是 简单地复制类中的每个成员。 下面看例子。   c++中初始化和赋值操作差别是很大的。  对于基本数

2013-12-04 19:02:48 958

转载 对象析构谈—— delete this 的使用及注意事项

In order to understand "delete this" :First Step - dive into "delete p"delete p 执行了哪些步骤?delete p 是一个两步的过程:调用析构函数,然后释放内存。delete p产生的代码看上去是这样的(假设是Object*类型的):delete原语可以看作如下这样一个过程:p->~Obj

2013-11-19 22:39:58 654

转载 C++虚函数原理

虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的。通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象。多态指同一个方法根据其所属的不同对象可以有不同的行为(根据自己理解,不知这么说是否严谨)。举个例子说明虚函数、多态、早绑定和晚绑定:  李氏两兄妹(哥哥

2013-10-31 13:51:13 449

转载 C++ 虚函数表解析

前言虚函数表一般继承无虚函数覆盖一般继承有虚函数覆盖多重继承无虚函数覆盖多重继承有虚函数覆盖安全性结束语附录一VC中查看虚函数表附录二例程C++ 虚函数表解析陈皓http://blog.csdn.net/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类

2013-10-31 13:47:02 421

转载 Select和epoll的区别

当一个节点和多个节点建立连接时,如何高效的处理多个连接的数据,下面具体分析两者的区别。1. select函数函数原型:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);参数介绍:(1)nfds    -- fdset集合中最大

2013-10-26 23:14:38 459

转载 linux下C语言使用线程池(附带编码)

使用一个东西,我们要明白为什么使用它,如何使用它,使用它能达到什么效果在写本文章时,我也借鉴了网上的部分资源,因为是之前很早搜索到的资料无法追踪源头,所以在此不再写来源,谨感谢各位大神。1    使用线程池的原因通常使用多线程都是在需要的时候创建一个新的线程,然后执行任务,完成后退出。一般情况下是完全够满足我们的程序的。但是当我们需要创建大量的线程,并且执行一个简单

2013-10-23 21:42:42 445

转载 常用服务器模型总结

UNPv3上一共总结了9种服务器模型分别是:1.迭代服务器  2.并发服务器,为每个客户fork一个进程  3.预先派生子进程,每个子进程都调用accept,accept无上锁保护 4.预先派生子进程,以文件锁的方式保护accept  5.预先派生子进程,以线程互斥锁上锁的方式保护accept 6.预先派生子进程,由父进程向子进程传递套接口描述字  

2013-10-23 20:32:39 556

转载 如何从10亿查询词找出出现频率最高的10个? (Top K问题)

1. 问题描述在大规模数据处理中,常遇到的一类问题是,在海量数据中找出出现频率最高的前K个数,或者从海量数据中找出最大的前K个数,这类问题通常称为“top K”问题,如:在搜索引擎中,统计搜索最热门的10个查询词;在歌曲库中统计下载率最高的前10首歌等等。2. 当前解决方案针对top k类问题,通常比较好的方案是【分治+trie树/hash+小顶堆】,即先将数据集按照has

2013-10-19 21:20:00 1604

空空如也

空空如也

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

TA关注的人

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