当前位置:首页 > 工业技术
C语言深度解剖  解开程序员面试笔记的秘密
C语言深度解剖  解开程序员面试笔记的秘密

C语言深度解剖 解开程序员面试笔记的秘密PDF电子书下载

工业技术

  • 电子书积分:9 积分如何计算积分?
  • 作 者:陈正冲编著
  • 出 版 社:北京:北京航空航天大学出版社
  • 出版年份:2012
  • ISBN:9787512408371
  • 页数:173 页
图书介绍:本书是作者结合多年嵌入式C语言开发经验和平时讲解C语言的心得体会整理而成,其中有很多作者独特的见解或看法。由于并不是从头到尾讲解C语言的基础知识,所以本书并不适用于C语言零基础的读者,其内容要比一般的C语言图书所深得多、细致得多,其中有很多问题是各大公司的面试或笔试题。第2版中新增加了部分编程规范的内容。
《C语言深度解剖 解开程序员面试笔记的秘密》目录

第1章 关键字 1

1.1最宽宏大量的关键字——auto 3

1.2最快的关键字——register 3

1.2.1皇帝身边的小太监——寄存器 3

1.2.2使用register修饰符的注意点 4

1.3最名不符实的关键字——static 4

1.3.1修饰变量 4

1.3.2修饰函数 5

1.4基本数据类型——short、int、long、char、float、double 5

1.4.1数据类型与“模子” 6

1.4.2变量的命名规则 6

1.5最冤枉的关键字——sizeof 11

1.5.1常年被人误认为函数 11

1.5.2 sizeof(int)*p表示什么意思 12

1.6 signed、unsigned关键字 12

1.7 if、else组合 15

1.7.1 bool变量与“零值”进行比较 15

1.7.2 float变量与“零值”进行比较 15

1.7.3指针变量与“零值”进行比较 16

1.7.4 else到底与哪个if配对呢 17

1.7.5 if语句后面的分号 18

1.7.6使用if语句的其他注意事项 19

1.8 switch、case组合 20

1.8.1不要拿青龙偃月刀去削苹果 20

1.8.2 case关键字后面的值有什么要求吗 21

1.8.3 case语句的排列顺序 22

1.8.4使用case语句的其他注意事项 23

1.9 do、while、for关键字 24

1.9.1 break与continue的区别 25

1.9.2循环语句的注意点 25

1.10 goto关键字 27

1.11 void关键字 27

1.11.1 void a 27

1.11.2 void修饰函数返回值和参数 28

1.11.3 void指针 30

1.11.4 void不能代表一个真实的变量 31

1.12 return关键字 31

1.13 const关键字也许该被替换为readonly 32

1.13.1 const修饰的只读变量 32

1.13.2节省空间,避免不必要的内存分配,同时提高效率 33

1.13.3修饰一般变量 33

1.13.4修饰数组 33

1.13.5修饰指针 33

1.13.6修饰函数的参数 34

1.13.7修饰函数的返回值 34

1.14最易变的关键字——volatile 34

1.15最会带帽子的关键字——extern 35

1.16 struct关键字 36

1.16.1空结构体多大 36

1.16.2柔性数组 37

1.16.3 struct与class的区别 38

1.17 union关键字 39

1.17.1大小端模式对union类型数据的影响 39

1.17.2如何用程序确认当前系统的存储模式 40

1.18 enum关键字 44

1.18.1枚举类型的使用方法 44

1.18.2枚举与#define宏的区别 45

1.19伟大的缝纫师——typedef关键字 46

1.19.1关于马甲的笑话 46

1.19.2历史的误会——也许应该是typerename 46

1.19.3 typedef与#define的区别 47

1.19.4#define a int[10]与typedef int a[10] 48

第2章 符号 50

2.1注释符号 51

2.1.1几个似非而是的注释问题 51

2.1.2 y=x/*p 52

2.1.3怎样才能写出出色的注释 52

2.2接续符和转义符 56

2.3单引号、双引号 57

2.4逻辑运算符 57

2.5位运算符 58

2.5.1左移和右移 59

2.5.2 0x01<<2+3的值为多少 60

2.6花括号 60

2.7++、--操作符 60

2.7.1++i+++i+++i 62

2.7.2贪心法 62

2.8 2/(-2)的值是多少 62

2.9运算符的优先级 63

2.9.1运算符的优先级表 63

2.9.2一些容易出错的优先级问题 65

第3章 预处理 67

3.1宏定义 68

3.1.1数值宏常量 68

3.1.2字符串宏常量 69

3.1.3用define宏定义注释符号“?” 69

3.1.4用define宏定义表达式 69

3.1.5宏定义中的空格 72

3.1.6#undef 72

3.2条件编译 73

3.3文件包含 75

3.4#error预处理 76

3.5#line预处理 76

3.6#pragma预处理 76

3.6.1#pragma message 77

3.6.2#pragma code_seg 78

3.6.3#pragma once 78

3.6.4#pragma hdrstop 78

3.6.5#pragma resource 78

3.6.6#pragma warning 78

3.6.7#pragma comment 79

3.6.8#pragma pack 79

3.7“#”运算符 83

3.8“##”预算符 83

第4章 指针和数组 85

4.1指针 85

4.1.1指针的内存布局 85

4.1.2“*”与防盗门的钥匙 86

4.1.3 int * p =NULL和*p=NULL有什么区别 87

4.1.4如何将数值存储到指定的内存地址 88

4.1.5编译器的bug 88

4.1.6如何达到手中无剑、胸中也无剑的境界 90

4.2数组 90

4.2.1数组的内存布局 90

4.2.2省政府和市政府的区别——&a[0]和&a的区别 91

4.2.3数组名a作为左值和右值的区别 92

4.3指针和数组之间的恩恩怨怨 92

4.3.1以指针的形式访问和以下标的形式访问 93

4.3.2 a和&a的区别 94

4.3.3指针和数组的定义与声明 96

4.3.4指针和数组的对比 98

4.4指针数组和数组指针 99

4.4.1指针数组和数组指针的内存布局 99

4.4.2 int(*)[10]p2——也许应该这么定义数组指针 100

4.4.3再论a和&a之间的区别 100

4.4.4地址的强制转换 101

4.5多维数组和多级指针 104

4.5.1二维数组 104

4.5.2二级指针 107

4.6数组参数和指针参数 108

4.6.1一维数组参数 108

4.6.2一级指针参数 110

4.6.3二维数组参数和二级指针参数 112

4.7函数指针 113

4.7.1函数指针的定义 113

4.7.2函数指针的使用 114

4.7.3(*(void(*)())0)()——这是什么 116

4.7.4函数指针数组 116

4.7.5函数指针数组指针 117

第5章 内存管理 119

5.1什么是野指针 119

5.2栈、堆和静态区 120

5.3常见的内存错误及对策 120

5.3.1指针没有指向一块合法的内存 120

5.3.2为指针分配的内存太小 122

5.3.3内存分配成功,但并未初始化 122

5.3.4内存越界 123

5.3.5内存泄漏 124

5.3.6内存已经被释放了,但是继续通过指针来使用 127

第6章 函数 128

6.1函数的由来与好处 128

6.2编码风格 129

6.3函数设计的一般原则和技巧 135

6.4函数递归 142

6.4.1一个简单但易出错的递归例子 142

6.4.2不使用任何变量编写strlen函数 144

第7章 文件结构 146

7.1文件内容的一般规则 146

7.2文件名命名的规则 151

7.3文件目录的规则 151

第8章 关于面试的秘密 152

8.1外表形象 152

8.1.1学生就是学生,穿着符合自己身份就行了 152

8.1.2不要一身异味,熏晕考官对你没好处 153

8.1.3女生不要带2个以上耳环,不要涂指甲 153

8.2内在表现 154

8.2.1谈吐要符合自己身份,切忌不懂装懂、满嘴胡咧咧 154

8.2.2态度是一种习惯,习惯决定一切 154

8.2.3要学会尊敬别人和懂礼貌 156

8.3如何写一份让考官眼前一亮的简历 157

8.3.1个人信息怎么写 158

8.3.2求职意向和个人的技能、获奖或荣誉情况怎么突出 159

8.3.3成绩表是应届生必须要准备的 161

附录1 C语言基础测试题 162

附录2 C语言基础测试题答案 168

后记 171

参考文献 173

返回顶部