摘要: 1. C语言中的 sizeof 问题(1)类型转换的问题#include#defineNUM(sizeof(arr)/sizeof(arr[0]))intarr[]={1,2,3,4,5,6,7};intmain(){inti;for(i=-1;iintmain(){inti;i=10;printf("i:%d\n",i);printf("sizeof(i++)is:%d\n",sizeof(i++));printf("i:%d\n",i);return0;}结果是i : 10sizeof(i++) is: 4i : 10为什么第三个 阅读全文
posted @ 2012-08-25 21:13 Mr.Rico 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 1. 一般说来,volatile用在如下的几个地方:(1)、中断服务程序中修改的供其它程序检测的变量需要加volatile;(2)、多任务环境下各任务间共享的标志应该加volatile;(3)、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。2. 判断char是有符号还是无符号C语言中的char是有符号还是无符号有时候这个问题和平台或者编译器有关,gcc和 Ms cl 都默认是si 阅读全文
posted @ 2012-08-25 21:07 Mr.Rico 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 散列Hash函数是一种特殊的映射函数, 散列表Hash Table由散列函数所产生的一种数据结构. 这是一种非常重要的数据结构. 首先, 先了解散列表在数据结构方面的基础: 散列表是用于存储动态集的一种非常有效的数据结构。通过散列函数h(key)的计算结果,直接得到key关键字表示的元素的存储地址。散列技术中,可能会有两个不同的key1和key2,通过h(key)计算得到的地址是一样的,这就发生了冲突。散列技术中散列函数h(key)和解决冲突的技术是最关键的问题。 散列函数要求(1)能快速的计算;(2) 计算结果分布要均匀。 散列函数有如下几种常用的:(1) 除留余数法;(2) 平方取中法;. 阅读全文
posted @ 2012-08-25 20:37 Mr.Rico 阅读(5555) 评论(0) 推荐(1) 编辑
摘要: 1. C库中的伪随机函数rand的实现 《The GNU C Library》里说的,大概如下: 公式: Y=(a*X+c)mod m 其中,a,c,m都是常数 一种取值是: a = 0x5DEECE66D = 25214903917 c = 0xb = 11 m = 2^48 用上面的公式可以这样写: __int64rand(){static__int64r=0;const__int64a=25214903917;const__int64c=11;const__int64m=1<<48;r=(r*a+c)%m;returnr;}2. ASNI 随机数生成的理解ANSI中和随机数生 阅读全文
posted @ 2012-08-25 20:29 Mr.Rico 阅读(2311) 评论(0) 推荐(0) 编辑
摘要: getword函数这儿所说的getword函数,是指从一段字符串中提取出其中的单词。其实这儿主要是分析利用一些标点符号和一些空白字符进行分割而成的单词,还没有达到编译器所使用的对字符串的分析。编译器是根据语言的文法对语言的源代码进行分析。一般需要利用编译原理中的文法分析来得到具体的token。而这儿的比较简单。对于C和C++有不同的实现方式。在C语言中有一个函数,strtok可以帮助实现这个。这个函数主要是根据给定的分隔符来对字符串进行分割。实现代码如下:/**10.C语言中利用strtok对字符串根据特定的字符进行划分*/#include#include#includeintgetwords 阅读全文
posted @ 2012-08-25 12:48 Mr.Rico 阅读(2159) 评论(0) 推荐(0) 编辑
摘要: 有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括: a. 常量型成员变量(const) b. 引用型成员变量 (&) c. 静态成员变量 (static) d. 整型静态常量成员变量 static const int e. 非整型静态常量成员变量 static const double 1. 常量型成员初始化:只能在构造函数的初始化列表中进行直接初始化。 如: classTest{public:constintMY_MASK;Test():MY_MASK(0xff){}};如果不是在初始化列表中对 const 常量进行初始 阅读全文
posted @ 2012-08-25 12:40 Mr.Rico 阅读(1775) 评论(0) 推荐(0) 编辑
摘要: 下面几个算法题是摘自《C语言实战105例(2006)》。但是有些解答开始没有看懂,然后从网上找了一些解答。1.储油问题 20程序如下:#include#defineMAX_STATION_NUM32/*定义最大允许的储油点数目*/intmain(){intk,i;floatwDistance;/*wDistance是终点至当前贮油点的距离*/floatstoredOil[MAX_STATION_NUM];/*storedOil[i]是第i个储油点的储油量*/floatdistance[MAX_STATION_NUM];/*distance[i]是第i个储油点到终点的距离*/puts(" 阅读全文
posted @ 2012-08-25 11:53 Mr.Rico 阅读(440) 评论(0) 推荐(0) 编辑
摘要: STL中并没有把heap作为一种容器组件,heap的实现亦需要更低一层的容器组件(诸如list,array,vector)作为其底层机制。Heap是一个类属算法,包含在algorithm头文件中。 在STL中为堆heap的创建和操作提供了4种算法:make_heap,pop_heap,push_heap和sort_heap。1. push_heap: 假定区间[first,last-1)已经包含了一个堆,把区间[first,last)调整为一个堆(从而 把last-1位置上的元素压入堆。 函数原型:voidpush_heap(first,last);voidpush_heap(first,la 阅读全文
posted @ 2012-08-25 08:06 Mr.Rico 阅读(854) 评论(0) 推荐(0) 编辑