发现C++的sizeof关键字的奇怪问题
摘要:在调试程序的时候发一个关于关键字sizeof的令我感到困惑的问题看下面的例子:int a[5]所有人都明白这里定义了一个数组,其包含了5 个int 型的数据。我们可以用a[0],a[1]等来访问数组里面的每一个元素。当我们定义一个数组a 时,编译器根据指定的元素个数和元素的类型分配确定大小(元素类型大小*元素个数)的一块内存,并把这块内存的名字命名为a。名字a 一旦与这块内存匹配就不能被改变。a[0],a[1]等为a 的元素,但并非元素的名字。数组的每一个元素都是没有名字的。那现在再来看看sizeof 关键字时的几个问题:sizeof(a)的值为sizeof(int)*5,32 位系统下为20
阅读全文
posted @
2010-11-29 17:28
陈国利
阅读(653)
推荐(0) 编辑
比较无聊的while与for的较量。
摘要:谈起程序循环,一般都会想到while或者for来控制。但是两者之间除了大家熟识的控制结构有所不同之外,两都运行效率又是如何。最近比较做了一个简单而且无聊的比较,发现两者运行效率的确略不同。之前在 彭博 著 《游戏编程指南》一书中看过说 for(;;)的执行速度比while(1)要快。书中的描述是用C++.为验证作者的观点,我用C#写了简单的测试语句(在Vs2008上运行),对比一下。结果相反。先看简单的测试程序。1.用while循环 DateTime dt1 = DateTime.Now; for (long i = 0; i < 100000000; i++) { while (tru
阅读全文
posted @
2010-11-08 17:28
陈国利
阅读(451)
推荐(1) 编辑
求和比较高效的做法
摘要:写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)一般做法是:int sum(int n){long sum=0;for(int i=0;i<n;i++) { sum+=i;}return sum;}上面这种做法简单,方便可是效率怎么样,应该不是最好。在数学上,我们有一个求和公式。n*(n+1)/2于是有int sum(int n){ return n*(n+1)/2;}显然,这样效率显然比上面要好得很多。所以有时候算法高效只需要一个转变。而数学公式正是求解的导向。
阅读全文
posted @
2010-11-05 16:46
陈国利
阅读(321)
推荐(0) 编辑
C++学习小记之static和const关键字
摘要:static关键字至少有下列n个作用:(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。const 是constant 的
阅读全文
posted @
2010-11-05 14:21
陈国利
阅读(714)
推荐(0) 编辑