- 浏览: 409296 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (325)
- 神经网络 (1)
- javascript (11)
- 数据结构 (2)
- 计算机图形学 (11)
- 模式识别 (1)
- 前端开发 (14)
- 机器学习 (11)
- ios开发 (50)
- Python (9)
- HTML5 (4)
- 计算机视觉 (9)
- 数字图像处理 (7)
- 架构设计 (19)
- 数据库设计 (9)
- 算法设计 (59)
- Java (37)
- 其他 (3)
- 游戏开发 (5)
- c++ (17)
- Linux (3)
- TCP/IP (2)
- Flex (41)
- 健康 (6)
- AI (2)
- 工具 (1)
- 数据挖掘 (1)
- 性能优化 (6)
- 综合 (2)
- 网络通信 (12)
- Android (2)
- UML (3)
- 软件设计 (11)
- 编程经验 (7)
- J2EE (1)
- 多媒体技术 (3)
- 数学 (7)
- php (4)
- 设计 (1)
- CS (2)
- 计算机理论 (1)
- 信息安全 (1)
最新评论
-
ahead_zhan:
good good good
flex3控件_ModuleLoader -
lonerzf:
好样的。非常感谢楼主
OpenCV视频教程整理 -
lonerzf:
好样的。谢谢~
OpenCV视频教程整理 -
coding1688:
博主说的不错,我在实现瀑布流布局时也用的masonry插件,有 ...
Javascript 瀑布流式布局及其动态效果的实现 -
snowolf:
除非玩游戏,不然没啥win的事情,或者用win的银行客户端,通 ...
macbook安装操作系统的机理分析
参考:http://www.cnblogs.com/steven_oyj/archive/2010/06/02/1749658.html
基础问题
1、过分积极的注释
注释必须和代码一起维护,不应该描述显而易见的事,或把别的地方已说清楚的东西在说一遍。
2、幻数(字面常量)
字面常量没有语义,也没有真正的内存地址。
所以不可以取其地址,也不可以用于初始化普通引用,例如:long &r1 = 40000;
但是const long &r1 = 40000 却是合法的。
所以,尽量不要使用字面常量,而应该使用枚举常量和初始化过的常变量
3、全局变量
全局变量增加了模块间的耦合。
当全局变量(静态变量)用来初始化的值不能在编译时就计算妥当,则该初始化动作就会拖到运行期,这容易导致致命错误。可以使用单价模式解决这个问题
4、未能区分函数重载和形式参数默认值
函数重载主要用于一组抽象意义相同,但实现不同的函数。
而形式参数默认值主要出于简化,为函数提供更简洁的接口。
5、对引用的认识误区
(1)由于引用没有地址,声明引用的引用、指向引用的指针或引用的数组都是不合法的。
(2)引用不可以有常量性或挥发性,所以不可以用关键字const或volatile来修饰引用。
(3)任何能作为左值的复杂表达式都能作为引用的初始化物
(4)char *cp = reinterpret_cast<char *>(a); // 对cp取地址则错误
reinterpret_cast<char *&>(a) = cp;// 正确,
(5)指向数组的引用保留了数组的尺寸信息,而指针则不保留(这个性质有时在数组名作为函数实参进行调用函数时使用)
(6)可以声明函数的引用:
ex: int f( double );
int (* const pf) (double) = f; // pf是指向函数f()的常量指针
int (&rf) (double) = f; // rf是函数f()的引用
可以把引用或函数本身(隐式)转换成指向函数的指针,再使用反引用语法。
6、对常量(性)的认识误区
(1)字母常量没有地址,永远不可以作左值
(2)int ci; const int *ip2 = &ci 的const只描述了通过ip2对ci的操作限制,而不是对ci的一般操作的限制。也就是说ci = 5可以,而*ip2 = 5不可以。
7、C语言的精妙之处
(1)如果?表达式中的两个选择结果都是左值,则该表达式本身就是个左值。
(2)case语句的标签必须是整形常量性的表达式(必须在编译时就要算出case中值)
8、区分可访问性和可见性
(1)要提供一个放置各种适当前置声明的专用头文件
(2)把class的接口与其实现分离,从而要达到真正的数据隐藏之境,而其不二法门则是运用桥接设计模式
(3)使用桥接,任何对于Class C实现的修改,只要不改变Class C的接口,影响就会被牢牢地钳制在一个单独的实现文件。
字符和字符串
1、strcat()只用来连接字符串,不可以使用字符作参数
2、C语言中字符用它们的字符集值对应的小整数表示,所以数字字符和它们对应的0-9的数字之间相互转换,加上或减去常数’0’即可
3、C语言中的字符常数是int型,因此sizeof(’a’)实际是sizeof(int),与C++不同的地方。
布尔表达式和变量
1、C语言中没有定义布尔变量,可以自己用宏去定义TRUE,FALSE为1,0。或者使用枚举enum bool{false, true};
2、一般不显示比较TRUE,FALSE
3、当P为指针,if(p)合法
宏与C预处理器
1、多语句宏的书写
通常的目标是:书写一个像包含一个单独的函数调用语句的宏。
这意味着:调用者需要提供最终的分号,而宏体则不需要。
因此宏体不能为简单的括弧包围的复合语句,因为如果这样,调用的时候就会发生语法错(明显是一个单独语句,但却多了一个分号)。每行的最后用\连接
2、sizeof不能用于#if预编译器指令中,因为此时还未对类型名称作解析
3、m4工具是用于多用途的预处理器
4、参数个数可变的宏的书写
一般用一个单独的用括弧括起来的”参数“定义和调用宏,参数在宏扩展的时候成为类似printf()那样的函数的整个参数列表。
#define DEBUG(args) (printf(“DEBUG: ”), printf arg)
if(n != 0) DEBUG((“n is %d\n”, n));
明显缺陷是必须记住使用一对额外的括弧。
标准输入输出库
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、printf(“%*d”, width, x)可以输出可变的域宽度 (width可是数字也可以是变量)
8、当s为已分配内存的字符串指针,可以用scanf(“%s”,s)对字符串进行
赋值
9、对double类型,必须是scanf(“lf”,&d)。不可以使用”f”
10、scanf %d不处理结尾的换行符
所以若后面紧跟着fgets(),则换行符会被fgets()取走。所以不要混用scanf和fgets,或者专门在scanf后用一个getchar()来接换行符
11、gets()不能被告知输入缓冲区的大小,可能导致缓冲区溢出
12、ftell()和fseek()用长整形表示文件内的偏移(位置)。因此偏移量被限制在20亿(2的31次方-1)以内
13、读取二进制文件时应该使用“rb”调用fopen()
文本/二进制区别只是发生在文件打开时,打开后,一切i/o函数相同
库函数
1、把数字转为字符串,使用sprintf。
对整型使用%d,长整形为%ld,浮点型为%f。
2、strncpy()当目标串长度过小时,不能自动在尾部加上’\0’。
但是当目标串长度过大时,会用多个’\0’填充。
strcat就可以自动加’\0’
3、将字符转为大小写,有toupper()和tolower()
4、把字符串分隔成用空白作间隔符的段,可以使用strtok()
5、要使用处理正则表达式或通配符匹配的API,可以下载regexp库
6、库函数中有qsort(void *base, int nelem, int width, int (*fcmp)()),可以对数组进行快速排序
7、可以使用time(),ctime(),localtime()和strftime()就可以取得当前日期或时间。
浮点运算、可变参数
浮点运算
1、浮点数的保存与整数一样是通过二进制进行的
所以从十进制小数转成二进制再转回去就会不一样。
2、比较两个浮点数最好的方法就是利用一个精确地阈值
ex: if(fabs(a - b)) <= epsilon * fabs(a) )
可变参数
1、在printf()中,%f同时表示float和double
2、使用stdarg.h可以使用可变参数
使用次序必须是va_list, va_start(),va_arg(),va_end()
3、可以使用下列函数输出和输入可变参数
int vprintf(char *format, va_list param);
int vfprintf(FILE *stream, char *format, va_list param);
int vsprintf(char *string, char *format, va_list param);
int vscanf(char *format, va_list param);
int vsprintf(char *string, char *format, va_list param);
int vsscanf(char *s, char *format, va_list param);
发表评论
-
C++ auto_ptr
2013-06-14 11:14 609C++的auto_ptr, auto_ptr所做的事情, ... -
STL中erase()小心使用
2013-06-08 08:50 827via: http://blog.sina.com.cn/s ... -
多堆栈(C++实现)
2013-05-23 01:04 546// Type your C++ code and cli ... -
标准C++中的string类的用法总结
2013-05-17 18:17 418转自:http://www.cnblogs.com/xFre ... -
数组重排(交叉排序)C++实现
2013-05-15 23:30 1681题目: a1 a2 a3 …… b1 b2 b3 …… ... -
C++知识点
2013-05-14 12:38 6361. Windows的窗体交互是基于 ... -
均勻分佈(Uniform Distribution)
2013-04-24 20:56 113参考:http://boost.ez2learn.com/ ... -
为什么C++编译器不能支持对模板的分离式编译
2012-11-22 11:05 650转自:http://blog.csdn.net/pongba/ ... -
C语言三大经典名著+微软四大名著
2012-11-09 09:40 2375参考:http://blog.163.com/feitech@ ... -
c/c++中const用法总结
2012-10-21 13:28 744参考:http://www.newsmth.net/pc/pc ... -
Google的编程样式指南
2012-10-19 18:26 642“样式”包括很多内容,从“使用驼峰命名规则”到“永远 ... -
你应当如何学习C++(以及编程)(rev#1)
2012-10-18 11:08 658参考:http://blog.csdn.net/pong ... -
用c语言进行bmp文件的读写
2012-09-07 10:09 1626参考:http://cvchina.net ... -
C++资源之不完全导引 (收藏)
2012-08-29 14:08 822前言 无数次听到“我要开始学习C++!”的呐喊,无数 ... -
C/C++程序员应聘常见面试题深入剖析
2012-08-29 09:41 722纯转发的,不过已经找不到出处了..... 许多面试 ... -
C++ 程序员必读书目清单
2012-06-11 09:49 997参考:http://news.cnblogs.com/n ... -
c++面向对象编程必备“良方”(欢迎大家来补充)
2012-06-09 18:13 691参考:http://blog.csdn.n ...
相关推荐
一本讲解C语言细节的书。本书尚未出版,是作者贡献给大家都,在此向原作者表示敬意。版权归原作者所有。
尽管C语言不是抽象数据类型的理想描述工具,但本书通过精心挑选的C语言核心子集和C++的引用及调用参数传递特性,构建了一个既不拘泥于C语言细节,又便于转换成可执行的C或C++程序的类C描述语言。 《数据结构(C语言...
同时,题目中的选择题和填空题将测试考生对C语言细节的掌握程度,如错误处理、类型转换、运算优先级等。 总之,C语言是计算机科学的基础,对理解和掌握其他高级语言有着重要的作用。在江苏省计算机等级考试中,对...
4. **C语言细节** - **main函数**:推荐使用`int main()`而非`void main()`,返回值通常表示程序的退出状态。 - **数值表示**:例如123是十进制,1x10^2+2x10^1+2x10^0。 - **字节单位**:1字节等于8位,1KB等于...
C语言深度解剖,C语言细节问题。讲述很使用的C语言深层次知识。来源于互联网。
在了解了文件的标题、描述、标签以及部分内容之后,可以提取出以下知识点,用于帮助初次学习C语言且尚不精通的同学。...通过阅读这些常见的问题和它们的解答,可以加深对C语言细节的理解,并提高编程能力。
程序改错题是考察你对C语言细节和逻辑的把握。题目通常会提供一段包含错误的代码,你需要找出错误并修正。关注错误提示"//******found******/",这将帮助你定位问题所在。错误可能涉及语法错误、逻辑错误或者运行时...
通过这类改错练习,学生能够加深对C语言细节的掌握,并且培养了对代码进行阅读和调试的能力。 报告中最后一个题目是一个综合性的班级成绩管理系统,这个系统的实现涉及到多个知识点,包括但不限于文件操作、结构化...
"你必须知道的495个C语言问题(完整版本)"是一本深入探讨C语言细节和常见问题的资源集合,涵盖了从基础知识到高级特性的全方位探讨。以下是对压缩包中部分章节标题的推测及对应的知识点解析: 1. **ch04.pdf - ...
在深入探讨C语言编程细节之前,我们需澄清一点:标题与描述中提及的主题为C语言,而部分内容中却转向了C++。尽管两者都属于C系语言家族,但它们之间存在显著差异,尤其是在语法、标准库以及面向对象编程的支持上。...
如array(数组), tree(二叉树)等 另外包含一些常见C/C++考题的验证性实现,如Util,virtual 其中以Util.cpp, Virtual.cpp最有价值, Util包含一些细节性的笔试题目; Virtual则包含常见和虚函数相关...
三、飞机大战实现细节 1. 数据结构:定义飞机、子弹和敌机的结构体,包含其坐标、速度、生命值等属性。 2. 图形绘制:虽然C语言本身不支持图形,但可以借助库如SDL或Allegro进行图形操作。 3. 碰撞检测:通过比较...
这反映了面试过程中对于C语言细节的重视。 C语言作为一门基础且广泛使用的编程语言,其面试题通常涵盖了以下几个核心知识点: 1. **基本语法**:包括变量定义、数据类型(如int, char, float, double等)、运算符...