C
文章平均质量分 52
memset
这个作者很懒,什么都没留下…
展开
-
一个简单的static类型的初始化问题
都知道用static修饰的变量是静态数据,此时变量的地址在静态区存放,因此在函数结束时,该地址中的值不被释放,除非主函数结束。因此每次访问该地址所指向的变量,都会有上次的值。但是会出现一个问题:先看看下边的这个程序: int add(){ static int num=1; num++; return num;}void main(){ int原创 2012-12-10 11:34:28 · 1113 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态转载 2013-07-16 13:34:13 · 890 阅读 · 0 评论 -
sscanf的高级用法
sscanf函数的高级用法sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。函数原型:int sscanf( const char *format [,argument]... );其中的format可以是一个或多个:{%[*][width][{h|l|I64|L}]type|' '|'\t'|'\n'|非%符号},转载 2013-03-05 16:04:02 · 843 阅读 · 2 评论 -
搜索--md5
MD5是一个加密压缩算法,传说中绝对安全的算法。是一个非可逆的过程。输入:一个字符串输出:一个16字节的字符串MD5保证了输出为不可重复(2004年前)。2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤原创 2013-05-02 17:47:15 · 842 阅读 · 0 评论 -
索引--优化数据结构--平衡二叉树(avl)
天下文章一大抄,最近在做第二版的搜索引擎,比起第一版总要有很大的改进才行。首先想到的是要对数据结构进行优化,就要把原来“倒排索引--二叉树”http://blog.csdn.net/txgc0/article/details/8697380这边文章中提到的二叉树进行优化,众所周知,单纯的简单二叉树的坏处就怕退化,退化成一条链表后,这查找速度是相当难以让人接受的。平衡二叉树的好处就是原创 2013-05-02 17:37:48 · 884 阅读 · 0 评论 -
从网页输入框获得字符的转码
从网络上接收到的检索词汉字编码是以%开始的十六进制数。而普通的字符还是以ascii码的形式。所以就牵扯到了转码问题,正好我目前所需要的编码方式跟获得的字符串中十六进制对应,所以我的转码就简单多了。 代码:#include #include #include void main(){ char *p="abcd%BB%D8%BC%D2ab%BB%D8%BC%D2";原创 2013-03-27 17:15:46 · 1013 阅读 · 0 评论 -
读取中英文混搭的文件
中英文编码方式不一样,中文是由两个字节组成的字符,而英文是由一个字节组成,而且该字节的首位为0,而如果是中文,中文编码的第一个字节首位是1.这就是最主要的区别。根据这个就可以对中英文混搭的文件进行读取。就是根据你读到的第一个字节是否小于0.下边是一段自己编写的一小段代码,不登大雅之堂,只为抛砖引玉。忘高人指导赐教:#include void main(){ FILE *stream;原创 2013-03-15 14:47:57 · 1620 阅读 · 0 评论 -
对大数据量进行排序--位图法
题目:对2G的数据量进行排序,这是基本要求。数据:1、每个数据不大于8亿;2、数据类型位int;3、每个数据最多重复一次。内存:最多用200M的内存进行操作。我听过很多种类似问题的解法,有的是内存多次利用,有的用到了外存,我觉得这两种做法都不是比较好的思想,太慢。由于这个题目看起来没有对效率进行约束,所以这两种方法也是对的,但是我这次提出一个比较好的算法来解答此题,如果有更好的做法请赶原创 2013-03-15 09:23:33 · 3598 阅读 · 0 评论 -
不使用sizeof 判断一个数据所占的内存大小
这个是我在笔试一家全英文笔试题的时候,绞尽脑汁才看懂的一个题目。猛的一看这是一个比较DT的问题,一般我们看到关于测一个变量的内存大小就会想到sizeof,但是这次就是不让用sizeof了。就需要发掘新的想法。当初在学习平台那一块知识的时候,讲到bootloader源码的时候似乎提到过一个想法,就是可以使用内存加1后的相减,得出该变量的实际内存大小。而后来我也在网上看到了一个类似的解答。原创 2013-03-01 16:41:11 · 1544 阅读 · 0 评论 -
直接插入排序基本思想
直接插入排序基本思想1、基本思想 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。2、第i-1趟直接插入排序: 通常将一个记录R[i](i=2,3,…,n-1)插入到当前的有序区,使得插入后仍保证该区间里的原创 2012-06-04 14:18:35 · 23526 阅读 · 6 评论 -
判断一个系统的大小端函数
小端:低地址存放地位数据;大端:低地址存放高位数据;而网络中传输是用大端。用代码实现大小端利用了共用体的原理实现判断是比较简单的一个方法:#include union n{ int a; char b;};int main(){ union n ss; ss.a=1; if(ss.b!=0) printf("Little\n"); else原创 2013-03-01 16:28:08 · 6972 阅读 · 3 评论 -
贪吃蛇(C语言版)
还有比较多的bug,但是没空更改了,这只是写给自己看的。以后用到了就能直接拷过来。#include #include #include #include #include #include #define MAXLINE 32#define MAXROW 16#define LEFT 0#define RIGHT 1#define UP 2#d原创 2012-12-10 09:12:46 · 967 阅读 · 0 评论 -
比较有意思的问题
1、不使用if else判断两个数的大小;(a*a/b+b*b/a)/(a/b+b/a)2、不使用sizeof判断一个变量的所占的字节数;3、不使用printf只用putchar输出int型的数据;。。。。后续增加中。。。。原创 2013-03-09 15:05:30 · 658 阅读 · 0 评论 -
关于链表的一些面试题
题一、给定单链表,检测是否有环。 使用两个指针p1,p2从链表头开始遍历,p1每次前进一步,p2每次前进两步。如果p2到达链表尾部,说明无环,否则p1、p2必然会在某个时刻相遇(p1==p2),从而检测到链表中有环。http://ostermiller.org/find_loop_singly_linked_list.html这篇文章讲了很多好的坏得相关算法。题二、 给定两个转载 2013-03-06 15:19:32 · 885 阅读 · 0 评论 -
C 某些库函数中字符串处理函数的具体实现
其中包括:strcpy(char *, char *),strncpy();strcat();strncat();strcmp();strncmp();strchr();strrchr();strlen();strdup();strspn();strpbrk();strtok(); memset();memcpy();memmove();memcmp();memscan();strstr();转载 2012-12-16 18:32:38 · 2810 阅读 · 0 评论 -
二进制位的倒序(牛人代码)
8位的倒序uint8 bin8_rev(uint8 data) { data=((data&0xf0)>>4) | ((data&0x0f) data=((data&0xCC)>>2) | ((data&0x33) data=((data&0xAA)>>1) | ((data&0x55) return data; }16位的倒序:转载 2012-12-13 10:05:31 · 6832 阅读 · 0 评论 -
对一个8位的二进制数进行位倒序
题目要求:一个8比特的数,要求编写一端C程序实现位倒序功能.如:a=b0b1b2b3b4b5b6b7,编程实现a=b7b6b5b4b3b2b1b0(要求实现的速度尽可能的快)实现有各种方法,如果是汇编似乎会稍微简单点,而要求c语言或许没有那么高效了,我只能想到大家都能想到的一种方法,记下来,以后可以看看。如果谁有好的方法可以给我留言啊。thanks!代码::#include v原创 2012-12-13 09:31:17 · 11859 阅读 · 3 评论 -
递归快排
#include "stdio.h"void swap(int *a,int *b){ /*序列中元素位置的交换*/ int tmp; tmp = *a; *a = *b; *b = tmp;}void prin(int k[]){ int i; static int cont = 0转载 2013-10-07 12:37:42 · 1113 阅读 · 0 评论