2013年11月12日
摘要: 阅读全文
posted @ 2013-11-12 09:59 crims 阅读(127) 评论(0) 推荐(0) 编辑
摘要: *标准C规定,编译器只取前31个字符作为有效的标识符,而标准C++则取前255个字符作为有效的标识符。*把具有特殊含义的字符输出到终端上,尤其是当它们出现在普通字符串或格式控制字符串中时,一般来说有两种办法:使用转义序列或者直接引用ASCII码值。 阅读全文
posted @ 2013-11-12 09:07 crims 阅读(170) 评论(4) 推荐(0) 编辑
  2013年11月11日
摘要: 1、在C++/C中,全局变量(extern或static)存放在程序的静态数据区中,在程序进入main()之前创建,在main()结束之后销毁,因此在我们的代码中根本没有机会初始化它们,于是语言及其实现就提供了一个默认的全局初始化器0。如果你没有明确地给全局变量提供初值,编译器就会自动地将0转换为所需要的类型来初始化它们。函数内的static局部变量和类的static数据成员都具有static存储类型,因此最终被移到程序的静态数据区中,也会被默认初始化为0,除非你明确地提供了初值。但是自动变量的初始化则是程序员的责任,因为它们是运行时在堆栈上创建的并且可以在运行时由程序员来初始化的,不要指望编 阅读全文
posted @ 2013-11-11 15:44 crims 阅读(423) 评论(0) 推荐(1) 编辑
  2013年11月8日
摘要: int *p = NULL 和 *p = NULL int *p = NULL; 这时候我们用编译器查看p的值为0x00000000.这句话的意思是定义一个指针变量p,其指向内存里面保存的是int类型的数据,在定义变量p的同时,把p中保存的内存的值设为0x00000000。这个过程叫做初始化。 int *p; *p = NULL; 第一行代码定义了一个指针变量p,其指向的内存里面保存的是int类型的数据;但是这时候变量p本身的值是多少则不得而知,也就是说现在变量p保存的可能是一个非法的地址。第二行代码给*p 赋值为NULL,即给p指向的内存赋值为NULL(访问p指向的内存);但是由于... 阅读全文
posted @ 2013-11-08 17:31 crims 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 1.数值宏常量 #define宏定义是个演技非常高超的替身演员,但也会耍大牌的,所以我们使用它要慎之又慎。它可以出现在代码的任何地方,从本行宏定义开始,以后的代码都认识宏了;也可以把任何东西都定义成宏。因为编译器会在预编译的时候用真身替换替身,所以在我们的代码里可以常常用替身来帮忙。 #define PI 3.1415926 在此后的代码中,你尽可能的使用PI来代替3.1415926,而且最好就这么做。不然的话,如果我们精度再提高一点怎么办?如果用PI的话,我们就只需要修改一次。这种情况不是最要命的,我们看下面情况: #define ERROR_POWEROFF -1 如果你的代码里... 阅读全文
posted @ 2013-11-08 17:21 crims 阅读(333) 评论(0) 推荐(0) 编辑
摘要: union维护足够的空间来放置多个数据成员中的“一种”,而不是为每一个数据成员配置空间。在union中,所有的数据成员共用一个空间,同一时间只能存储其中一个数据成员,所有的数据成员具有相同的起始地址。 阅读全文
posted @ 2013-11-08 17:11 crims 阅读(190) 评论(0) 推荐(0) 编辑
摘要: volatile关键字和const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统,硬件或者其他线程等等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 下面例子: int i = 10; int j = i; // 语句1 int k = i; // 语句 2 此时,编译器对代码进行优化,这是因为,在1,2两句中,i没有被用作左值(没有被赋值)。这时候编译器认为i的值没有改变,所以在语句1时,从内存取出i的值付给j之后,这个值并没有被丢掉,而是在2语句中继续使用这个值给k赋值。编译器不会生成... 阅读全文
posted @ 2013-11-08 17:09 crims 阅读(183) 评论(0) 推荐(0) 编辑
摘要: const是constant的缩写,是恒定不变的意思。被const修饰的值,是只读变量。1、const修饰只读变量,具有不变性 #include int main() { const int Max = 100; int Array[Max]; return 1; } 在VC6.0中创建该文件,编译器会报错。因为我们定义数组必须指定其元素的个数,这也从侧面证实C语言中,const修饰的Max仍然是一个变量,只不过是只读属性罢了。 const修饰的只读变量必须在定义的同时初始化。2、节省空间,避免不必要的内存分配,同时提高效率 const推出的初始目的,是为了取代预编... 阅读全文
posted @ 2013-11-08 16:56 crims 阅读(222) 评论(0) 推荐(0) 编辑
  2013年11月6日
摘要: 一、if、elsefloat变量与“零值”进行比较: float fTestVal = 0.0; if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); //EPSINON为之前定义好的精度 float和double类型的数据都是有精度限制的,这样直接拿来和0.0比,当然不正确 如果一个数落在[0.0-EPSINON,0.0+EPSINON]这个闭区间内,我们认为在某个精度内他的值和零值相等,否则不相等。 扩展一下,把0.0替换为任何一个你想比较的浮点数,那我们就可以比较任意两个浮点数的大小了,当然是在这个精度范围内 阅读全文
posted @ 2013-11-06 10:16 crims 阅读(180) 评论(0) 推荐(0) 编辑
摘要: void main(int arg ,char *arv[]){} arg -- 命令行参数总个数arv[0] -- 参数1,程序名 arv[1] -- 参数2,字符串 arv[2] -- 参数3,字符串 arv[3] -- 参数4,字符串 例如,你的可执行程序是 fly.exe 运行命令: fly.exe 123 45 传入主函数的 arg=3 arv[0]: "fly.exe" arv[1]: "123" arv[2]: "45" -------------------- fly.exe 123 45 987 传入主函数的 arg 阅读全文
posted @ 2013-11-06 09:53 crims 阅读(227) 评论(0) 推荐(0) 编辑