随笔分类 - C/C++语言
摘要:1、过分积极的注释 注释必须和代码一起维护,不应该描述显而易见的事,或把别的地方已说清楚的东西在说一遍。 2、幻数(字面常量) 字面常量没有语义,也没有真正的内存地址。 所以不可以取其地址,也不可以用于初始化普通引用,例如:long &r1 = 40000; 但是const long &r1 = 40000 却是合法的。 所以,尽量不要使用字面常量,而应该使用枚举常量和初始化过的常...
阅读全文
摘要:浮点运算 1、浮点数的保存与整数一样是通过二进制进行的 所以从十进制小数转成二进制再转回去就会不一样。 2、比较两个浮点数最好的方法就是利用一个精确地阈值 ex: if(fabs(a - b)) <= epsilon * fabs(a) ) 可变参数 1、在printf()中,%f同时表示float和double 2、使用stdarg.h可以使用可变参数 使用次序必须是va_list, v...
阅读全文
摘要:1、把数字转为字符串,使用sprintf。 对整型使用%d,长整形为%ld,浮点型为%f。 2、strncpy()当目标串长度过小时,不能自动在尾部加上’\0’。 但是当目标串长度过大时,会用多个’\0’填充。 strcat就可以自动加’\0’ 3、将字符转为大小写,有toupper()和tolower() 4、把字符串分隔成用空白作间隔符的段,可以使用strtok() 5、要使用处理正则表...
阅读全文
摘要:撰文/ 曾毅 陶文最后更新:2004年6月12日声明:.本文2004年5月首发于《CSDN开发高手》,版权归该杂志与《程序员》杂志社所有。杂志限于篇幅部分内容有所删节,此处版本为相对完整版本。本文为介绍性文章,会随笔者学习C++语言不断更新。 前言无数次听到“我要开始学习C++!”的呐喊,无数次听到“C++太复杂了,我真的学不会”的无奈。Stan Lippman先生曾在《C++ Primer》一...
阅读全文
摘要:1、保存getchar()的返回值变量必须是int型 getchar()可能返回任何字符,包括EOF 2、EOF通常对应键盘ctrl+z或ctrl+d 3、fgets()在遇到文件结束符时返回的是NULL 4、在输出需要显示的时候,最好明确调用fflush(stdout)调用 5、在printf中输出‘%’需要’%%’ 6、printf的%f既可以输出float又可以输出double 7、pri...
阅读全文
摘要:1、C语言中没有定义布尔变量,可以自己用宏去定义TRUE,FALSE为1,0。或者使用枚举enum bool{false, true}; 2、一般不显示比较TRUE,FALSE 3、当P为指针,if(p)合法
阅读全文
摘要:1、多语句宏的书写 通常的目标是:书写一个像包含一个单独的函数调用语句的宏。 这意味着:调用者需要提供最终的分号,而宏体则不需要。 因此宏体不能为简单的括弧包围的复合语句,因为如果这样,调用的时候就会发生语法错(明显是一个单独语句,但却多了一个分号)。每行的最后用\连接 2、sizeof不能用于#if预编译器指令中,因为此时还未对类型名称作解析 3、m4工具是用于多用途的预处理器 4、参数个...
阅读全文
摘要:1、strcat()只用来连接字符串,不可以使用字符作参数2、C语言中字符用它们的字符集值对应的小整数表示,所以数字字符和它们对应的0-9的数字之间相互转换,加上或减去常数’0’即可3、C语言中的字符常数是int型,因此sizeof(’a’)实际是sizeof(int),与C++不同的地方。
阅读全文
摘要:1、gets(char *),fgets(char *)中的字符串指针类型参数,必须是之前已经对其分配了空间了的,否则不合法。 注意:gets()可以自动去除标准输入的换行,得到的字符串会以’\0’结束。 fgets()不能自动去除文件中的’\n’,会一直读到’\n’之后,且没有’\0’结尾,所以需要自己把’\n’换成’\0’。 2、strcat(char *, char *),strcpy(c...
阅读全文
摘要:1、注意:类型T的指针和类型T的数组名并非同一个类型。 例如:char a[6] 与 extern char *a并不能匹配 2、char a[] 与 char *a是不一样的。 例如:char a[6]请求预留6个字符的位置,并用“a”表示,实际是说有一个称为“a”的位置,可以放入6个字符。sizeof(a)为6,但是:如果把a做实参,在被调用函数用对形参做sizeof,就只取得到形参指针变量本...
阅读全文
摘要:许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到 strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。 分析这...
阅读全文
摘要:1、空指针表示"未分配"或者"尚未指向任何地方"。它与未初始化的指针不同,未初始化的指针可能指向任何地方。每种指针类型都要一个空指针,而不同类型的空指针的内部可能不尽相同。2、一般给指针赋值0就是将指针设为空指针(等同设为NULL)。但是0作为函数参数,传给指针时需要对0作类型转换。3、可以使用if(p)等同于if(p != 0),但是这种风格不好。4、NULL实际上是一个定义在 stdio.h中...
阅读全文
摘要:1、(1)int i = 7; printf("%d\n", i++ * i++); // 49解释:后缀自加和自减在输出原值以后,对原变量的改变操作并不是马上接着做的。 此处就是在整个表达式都利用原值进行运算之后,才对i做两次自加(2)int i = 7; printf("%d\n", ++i * ++i); // 81解释:++i后就已经把i变成8,再++i后,i变成9, 此时再把两个i(为9...
阅读全文
摘要:1、 后缀++和--比*的优先级高,所以*P++与*(P++)等价。它自增P并返回P自增前所指向的变量数值。 前缀++和--与*的优先级相同,但是按从右向左结合。所以++*P与(*P)++等价。2、对于char *p; int a[10]; P = a; 不可以使用((int *)P)++。因为(int *)p只可以作右值。要达到目的可以用P = (char *)((int *)P + 1)...
阅读全文
摘要:1、使用哪种整数类型的选择(1)long型:大数值时,大于32,767(+2的15次方)或小于-32,767(-2的15次方)(2)short型:若使用大数组或很多结构2、定义全局变量和函数的最好方式 最好将定义放在某个相关的.c文件中,在头文件.h中进行外部声明,在需要使用的时候,只要包含对应的头文件即可。定义全局变量的.c文件也应该包含该头文件,以便编译器检查定义和声明的一致性。 全局变量和函...
阅读全文

浙公网安备 33010602011771号