摘要: 这是《C++大学教程》第2版的一些记录。第二版显得比较旧,具体时间我没有查到,从其中的内容看来应该是C++标准推出之前。1. C++中获取随机数srand函数只要在程序中调用一次即可得到所需要的随机化结果,多次调用是多余的,会降低程序性能。 由rand函数直接产生的值总是取值为:0<<rand()<<RAND_MAX常见错误:用srand函数代替rand函数产生随机数是个语法错误,因为srand函数不返回值。 2. C++中的存储类C++提供了4个存储类说明符:auto,register,extern和static。标识符的存储类说明符可以确定其存储、范围和连接。标识符 阅读全文
posted @ 2012-04-05 15:03 Mr.Rico 阅读(883) 评论(0) 推荐(0)
摘要: 网上找到的一个介绍C语言函数库的文件。介绍了C标准中的常用 函数。并且给出了每一个函数是简单用法示例。 阅读全文
posted @ 2012-04-01 21:06 Mr.Rico 阅读(326) 评论(0) 推荐(2)
摘要: 这本书主要介绍的C语言的标准,以C89为住,C99中的不同特别标出。并且也指出了C++与C之间的不同。还是值得好好看一看的。今天粗略的过了一遍,下面是一些对我比较有用的部分。 阅读全文
posted @ 2012-04-01 19:51 Mr.Rico 阅读(431) 评论(0) 推荐(0)
摘要: 读完这本书之后感觉这本书还是不错的。这本书一个很大的特点就是为我们理清C与C++之间的区别。我觉得这一点很重要,很多C++类 的图书经常就是把C和C++混在一起讲,然后导致读者对C与C++之间的差异不清晰,以为C++是完全包括C的。这本书的一个缺点是内容有些老了。之前我也看过C++ Primer。曾经很多次都想学习C++,每次开始学的时候都是从C++ primer开始。然后就产生了一种想法是,基本上所有的C++书籍都是千篇一律,没有差别。前一段时间,我终于坚持把C++ primer看完,感觉学到了很多。现在又看了一些其他的C++书籍,发现,C++ Primer讲得真的很不错。原来以为C++书籍 阅读全文
posted @ 2012-04-01 11:30 Mr.Rico 阅读(1149) 评论(0) 推荐(1)
摘要: 这本书中列出了31章共1500个知识点,带有很多的例子。本书适合对C/C++有一些了解的程序员进行查缺补漏。因为这里边对知识点的讲解比较凌乱不是很条理,前面的内容有时就用到了后面内容,如果你不是了解的话,读起来就比较困难了。本书还有一个很大的特点是很多地方是针对Dos 平台的,我是使用的linux,所以有很多地方是不适合的。即便是对于windows 平台,有些地方可能也不适用了。因为这本书还是比较老的。有些不需要的地方可以跳过。关于C++的介绍,如果你是刚刚学C++话还是要先读《C++ Primer》,那本书比较条理,可以让你理清关系。了解各个知识点。书最后的关于Windows编程的部分我基本 阅读全文
posted @ 2012-03-30 16:49 Mr.Rico 阅读(1817) 评论(0) 推荐(0)
摘要: 这个是在《C/C++程序员实用大全·精华版:C/C++最佳编程指南》一书中提到了"ANSI设备驱动器"。在shell编程中也是类似的。要是通过彩色化提示符来增加个性化,就要用到转义序列。 转义序列就是一个让 shell 执行一个特殊步骤的控制指令。 转义序列通常都是以 ESC 开头(这也是它的命名原因)。 在 shell 里表示为 ^[。这种表示法需要一点时间去适应, 也可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的 33)。要直接在 shell 里面输入转义序列我们需要先按 ctrl-v:CTRL-v E 阅读全文
posted @ 2012-03-27 21:11 Mr.Rico 阅读(682) 评论(0) 推荐(0)
摘要: 这是在《C专家编程》一书上提到的一个问题。我在网上搜索了一下,找到了一些解法,总结如下。首先是《C专家编程》上提到解法:#define ISUNSIGNED(a) (a>=0 && ~a>=0)#define ISUNSIGNED(type) ((type)0-1 > 0)第二个从类型来判断,没有问题。而第一个只能用在K&R C里,在ANSI C里就不行了。当这个宏被用在int/unsigned int时,没有任何问题。但是当使用在char和short上就会出错。分析: 此宏在int/unsigned int好使的原因是宏中的a的精度始终不会发生变化, 阅读全文
posted @ 2012-03-27 21:10 Mr.Rico 阅读(3308) 评论(1) 推荐(0)
摘要: 内联函数并不总是内联 Inline function是在C++中引入的一种机制,它可以拓展函数代码,避免调用函数的额外开销。在Linux环境下,gcc编译选项必须加上优化选项才能使inline有效。inline与static的关系在这儿有一个比较详细的分析:http://www.cnblogs.com/xkfz007/articles/2370640.html 内联函数(inline)机制与陷阱 内联机制被引入C++作为对宏(Macro)机制的改进和补充(不是取代)。内联函数的参数传递机制与普通函数相同。但是编译器会在每处调用内联函数的地方将内联函数的内容展开。这样既避免了函数调用的开销... 阅读全文
posted @ 2012-03-27 21:09 Mr.Rico 阅读(16741) 评论(0) 推荐(0)
摘要: const: const 是一个左结合的类型修饰符,它与其左侧的类型修饰符和为一个类型修饰符。const可以用于定义常量,可以限定函数的引用参数(因为传值的参数根本不用限定),可以限定函数返回值为引用的情况。还有一个用法是修饰类的成员函数。这样情况下,在类内的声明和类外的定义都要加上const。 还有一种情况是,声明类的const成员变量的时候,如何进行初始化。在这种情况下,由于常量不能修改,所以只能在构造函数的初始化列表中进行复制初始化。如果同时声明为了static时可以在类外进行初始化,但此时不能加static关键字。mutable: mutalbe的中文意思是"可变的,易变的& 阅读全文
posted @ 2012-03-27 21:09 Mr.Rico 阅读(2965) 评论(0) 推荐(0)
摘要: 在看《你必须知道的496个C语言问题》一书中,提到"达夫设备"这个东西,主要是下面的代码: register n = (count + 7) / 8; /\* count > 0 assumed \*/ switch (count % 8) { case 0: do { \*to = \*from++; case 7: \*to = \*from++; case 6: \*to = \*from++; case 5: \*to = \*from++; case 4: \*to = \*from++; ... 阅读全文
posted @ 2012-03-27 21:08 Mr.Rico 阅读(6484) 评论(3) 推荐(1)
摘要: 下面是一些比较重要的宏定义,记录一下:assert断言:#define assert(cond) ((cond)?(void)0:_assert(#cond,__FILE__,__LINE__)) void _assert(char*cond,char*filename,long lineno) { printf("assert:%s in file:%s, at line:%d\n",cond,filename,lineno); }获得结构体中域的偏移量#define offsetof(type,field) ((int)((char*)&(((type*)0)- 阅读全文
posted @ 2012-03-27 21:07 Mr.Rico 阅读(1074) 评论(0) 推荐(0)
摘要: Quine 以哲学家 Willard van Orman Quine (1908-2000) 而命名,表示一个可以生成他自己的完全的源代码的程序。编写出某个语言中最简短的 quine 通常作为黑客们的消遣。作为真正的 quine ,有一些约定:程序不能接受输入或者是打开文件,因为那样就可以直接输入源代码或者是把源代码文件直接打开再重新打印出来,就没有什么意思了;同时,一个完全空白的程序(产生完全空白的输出,即没有输出)也并不能称作 quine 。quine 的想法最初出现在 Bratley, Paul and Jean Millo. "Computer Recreations; Se 阅读全文
posted @ 2012-03-27 21:07 Mr.Rico 阅读(9530) 评论(0) 推荐(0)
摘要: 网上搜索了一下,发现检测内存泄漏的工具还是很多的。下面是从网上找到的一些材料,主要是在linux系统中内存泄漏的检测方法。(1)什么是内存内存泄漏? 在此,谈论的是程序设计中内存泄漏和错误的问题,不过,并不是所有的程序都有这一问题。首先,泄漏等一些内存方面的问题在有的程序语言中是不容易发生的。这些程序语言一般都认为内存管理太重要了,所以不能由程序员来处理,最好还是由程序语言设计者来处理这些问题,这样的语言有Perl、Java等等。 然而,在一些语言(最典型的就是C和C++)中,程序语言的设计者也认为内存管理太重要,但必需由开发人员自己来处理。内存泄漏指的是程序员动态分配了内存,但是在... 阅读全文
posted @ 2012-03-27 21:05 Mr.Rico 阅读(1109) 评论(0) 推荐(0)
摘要: 先通过一个小程序来看一看: #include void foo(int x, int y, int z) { printf("x = %d at [%X]n", x, &x); printf("y = %d at [%X]n", y, &y); printf("z = %d at [%X]n", z, &z); } int main(int argc, char *argv[]) { foo(100, 200, 300); return 0; }运行结果:x = 100 at [... 阅读全文
posted @ 2012-03-27 21:04 Mr.Rico 阅读(30404) 评论(1) 推荐(6)
摘要: 线性同余随机数生成器介绍:古老的LCG(linearcongruentialgenerator)代表了最好最朴素的伪随机数产生器算法。主要原因是容易理解,容易实现,而且速度快。LCG 算法数学上基于公式:X(n+1)=(a*X(n)+c)%m其中,各系数为:模m,m>0系数a,0<a<m增量c,0<=c<m原始值(种子)0<=X(0)<m其中参数c,m,a比较敏感,或者说直接影响了伪随机数产生的质量。一般而言,高LCG的m是2的指数次幂(一般2^32或者2^64),因为这样取模操作截断最右的32或64位就可以了。多数编译器的库中使用了该理论实现其伪随机 阅读全文
posted @ 2012-03-27 21:03 Mr.Rico 阅读(25175) 评论(0) 推荐(4)