第一章C语言学习初步 1
技巧1 编程简介 1
目 录 1
技巧2 建立ASCII源文件 2
技巧3 C语言程序的编译 2
技巧4 理解语法规则的错误 3
技巧5 典型C程序的结构 4
技巧6 给程序增加语句 5
技巧7 屏幕显示另起一行 5
技巧8 C语言中区分字母的大小写 6
技巧9 理解逻辑错误(BUGS) 7
技巧10理解程序的开发过程 7
技巧11理解文件的类型 8
技巧12进一步理解连接程序 9
技巧14 帮助编译器定位头文件 10
技巧13理解头文件 10
技巧15加快编译速度 11
技巧16程序注释 11
技巧17提高程序的可读性 12
技巧18注意编译器的警告消息 13
技巧19控制编译器的警告消息 13
技巧20将语句注释掉 14
技巧21 名字中有什么? 15
技巧22理解C语言中的分号 15
技巧23变量的理解 15
技巧24给程序中变量赋值 16
技巧25理解程序中的变量类型 16
技巧26声明同种类型的多个变量 17
技巧27声明变量时应加注释 17
技巧30使用有意义的变量名 18
技巧29变量声明时对变量的多个初始化 18
技巧28在变量声明时进行 18
技巧31理解C语言的关键字 19
技巧32理解整型变量(int) 19
技巧33理解字符型变量(char) 20
技巧34理解浮点型变量(float) 20
技巧35理解双精度型变量(double) 21
技巧36给浮点数赋值 21
技巧37理解类型修饰符 21
技巧38理解无符号的类型修饰符(unsigned) 22
技巧39理解长类型修饰符(long) 22
技巧40 unsigned和long类型修饰符的结合使用 23
技巧41大数值的便用 24
技巧42理解寄存器类型修饰符(register) 24
技巧43理解短类型修饰符(short) 24
技巧45理解带符号类型修饰符(signed) 25
技巧44 当变量定义中有类型修饰符时可以省略int 25
技巧46多重赋值运算 26
技巧47将一种类型的变量值赋给不同类型的变量 26
技巧48建立自己的类型 26
技巧49赋于16进制或8进制的值 27
技巧50溢出的理解 27
技巧51理解变量的精度 28
技巧52引号及其它字符的赋值运算 29
技巧53 printf语句 30
技巧54使用printf显示整型数 31
技巧55用八进制或十进制显示整型数 31
技巧56用printf显示无符号整型数 32
技巧57使用printf显示长整型数值 33
技巧58使用printf显示浮点数 33
技巧59使用printf显示字符 34
技巧60使用指数格式显示浮点数 34
技巧61使用十进制或指数格式显示浮点数 35
技巧63用printf显示指针地址 36
技巧62用printf显示字符串 36
技巧64带符号显示数值 37
技巧65使用printf格式输出一个整数 37
技巧66整数输出前面置零 38
技巧67#显示八进制和十六进制数的前缀 39
技巧68用printf格式化输出一个浮点数 40
技巧69指数格式化输出 40
技巧70 printf输出左对齐 41
技巧71 printf中的格式修饰符的综合使用 42
技巧72字符串延续至下一行 42
技巧73远近字符串的显示 43
技巧74在printf中使用转义码 43
技巧75 printf所显示字符数的确定 44
技巧77使用ANSI设备驱动程序 45
技巧76使用printf的返回值 45
技巧78利用ANSI转义序列清除屏幕 46
技巧79利用ANSI转义序列控制显示内容的颜色 46
技巧80利用ANSI驱动程序定位光标 47
技巧81 C语言中的基本数学运算 47
技巧82算术中的模运算 48
技巧83理解运算符的优先级 49
技巧84 对运算符求值顺序的强制 50
技巧85 理解C语言加运算符 51
技巧86 理解C语言减1运算符 52
技巧87 理解位的或运算 54
技巧88理解位的与运算 55
技巧89理解位的异或运算 55
技巧90理解位的反运算 57
技巧91 对变量自身进行运算 57
技巧92 理解C的条件运算符 58
技巧93 理解C的变量大小运算符 59
技巧94执行移位操作 59
技巧95 执行位循环移位 61
技巧96 对条件运算符的理解 62
技巧97 对循环过程的理解 62
技巧98 C语言是如何表示条件真假的 62
技巧99 使用if测试条件 63
技巧100单条语句和复合语句的理解 63
技巧101等式测试 64
技巧102关系运算 65
技巧103用逻辑与判断两个条件 66
技巧104用逻辑或判断两个条件 66
技巧105逻辑反运算 67
技巧106条件运算结果的被赋值 67
技巧107在复合语句中定义变量 68
技巧108使用缩进方式提高程序的可读性 69
技巧109扩展Ctrl-Break检查的使用 70
技巧110检测浮点值 71
技巧111无限循环 71
技巧112 for语句中的一部分是可选的 72
技巧113测试一个赋值语句 73
技巧114对if和if—else的认识 74
技巧115语句重复执行指定的次数 75
技巧116 for语句当中的减量值 76
技巧117 for循环增量的控制 78
技巧118 for循环不仅适用于整型变量 78
技巧119对空循环的理解 79
技巧120对无限循环的理解 80
技巧121一个for循环中使用逗号运算符 80
技巧122避免在for循环中改变控制变量的值 81
技巧123使用While循环 81
技巧124对while循环语句中部分的理解 83
技巧125使用do来重复执行一条或多条语句 84
技巧126对继续语句的理解 86
技巧127用break语句来结束一个循环 87
技巧128使用goto分支 88
技巧129测试多个条件 89
技巧130对switch中break语句的理解 91
技巧131 用switcb语句的default用法 93
第二章宏和常量 95
技巧132在程序中定义一个常量 95
技巧133宏和常量的展开 96
技巧134给常量和宏命名 97
技巧135使用_FILE_预处理常量 97
技巧136使用_LINE_预处理常量 98
技巧137改变预处理器常数的值 98
技巧138产生一个非条件预处理器错误 99
技巧139其它的预处理器常量 100
技巧140记录预处理器的日期和时间 100
技巧141 测试是否与ANSI C兼容 100
技巧142测试编译器是否支持C++ 101
技巧143解除宏或常量的定义 101
技巧144宏和函数的异同 102
技巧145对编译器指令的理解 102
技巧146进一步学习宏、常量和预处理指令 102
技巧147建立自己的头文件 103
技巧148 #include<文件名>和#include”文件名”的比较 103
技巧149测试是否定义一个符号 103
技巧150执行If—Else预处理 104
技巧151测试更强的预处理条件 104
技巧152执行If—Else和Else—If预处理 105
技巧154建立自己的宏 106
技巧153使用多行宏和常量 106
技巧155在宏定义中不能使用分号 107
技巧156建立求最大最小值的宏 107
技巧157建立求平方和立方的宏 108
技巧158注意宏定义中空格 109
技巧159对宏中括号的理解 109
技巧160宏是无类型的 110
第三章字符串 112
技巧161字符串的形象化说明 112
技巧162编译器如何表示一个字符串 112
技巧163 C如何存贮字符串 113
技巧164“A”和‘A’有什么区别 114
技巧165在一个字符串常量中如何表示一个引号 115
技巧166决定串的长度 115
技巧167 strlen函数的使用 116
技巧168字符串的复制 117
技巧169字符串相加 118
技巧170把n个字符加到一个字符串后 119
技巧171 把一个串变换成另一个串 120
技巧172不要超出一个字符串的边界 121
技巧173判断两个字符串是否相同 121
技巧174 大小写忽略时字符串相等的判断 122
技巧175把字符串转换为全大写或全小写字母 123
技巧176在字符串中查找某个字符 124
技巧177返回某字符在字符串中第一次出现的位置 126
技巧178确定某字符在字符串中的最后出现位置 126
技巧179返回某字符在字符串中最后出现的位置 127
技巧180远串调用 128
技巧181 支持远串调用的函数 129
技巧182统计一个字符串中某字符出现的次数 129
技巧183反转字符串的内容 129
技巧184用某一指定字符来填充字符串 130
技巧185两个字符串的比较 131
技巧186 比较两个中开始的n个字符 132
技巧187进行大小写忽略的串比较 134
技巧188把一个字符串转换为数 135
技巧189复制一个字符串的内容 135
技巧190找出字符串中第一个不属于给定字符集的字符 137
技巧191 确定一个子串在源串中的位置 138
技巧192给出现的子串计数 139
技巧193获得子串出现的位置 139
技巧194获得最后出现的子串指针 140
技巧195 不用%s格式修饰符来显示串 140
技巧196一个字符串中删除一个子串 141
技巧197使用其它子串来替换一个子串 142
技巧198转换一个ASCII数字表达式(ASCII Numeric Representation) 143
技巧200判断一个字符是否是字母表中的一个字母 144
技巧201 判断一个字符是否为一个ASCII值 144
技巧199判断一个字符是否是字母数字(Alphanumeric) 144
技巧202判断一个字符是否为控制字符 145
技巧203判断一个字符是否是数字(Digit) 145
技巧204判断一个字符是否是一个图形字符(Graphics Character) 145
技巧205判断一个字符是大写字母还是小写字母 146
技巧206判断一个字符是否可打印 146
技巧208判断一个字符是否为空白字符 147
技巧209决定一个字符是否为十六进制数值 147
技巧207判断一个字符是否是标点符号 147
技巧210将一个字符转换成大写形式 148
转换211把一个字符转换成小写字母 149
技巧212使用ASCII字符 150
技巧213将格式化输出结果送到一个字符串变量 150
技巧214从字符串中读取参数 151
技巧215标识(tokenizing)串以节省空间 152
技巧216初始化字符串 152
技巧218对局部变量的理解 154
第四章函数 154
技巧217返回值不是整型的函数 154
技巧219函数是如何使用堆栈的 155
技巧220对函数调用开销的理解 155
技巧221 C把局部变量放在哪里 157
技巧222声明全局变量 157
技巧223为什么程序应该尽量避免使用全局变量 158
技巧224解决全局和局部变量名的冲突 158
技巧225优化全局变量的有效范围 159
技巧226对函数值参(call by value)调用的理解 160
技巧227为什么值参调用能防止参数值的改变 161
技巧228对形参调用(call refetence)的理解 162
技巧229获得变量的地址 162
技巧230使用变量的地址 163
技巧231改变参数的值 165
技巧232仅改变指定的参数 166
技巧233形参调用仍要使用堆栈 167
技巧234能记住的函数内部变量 167
技巧235 C是如何初始化静态变量的 169
技巧236按pascal调用顺序传递参数 169
技巧237 pascal关键字真正做了什么 169
技巧238混合语言编程的例子 170
技巧239对cdecl关键字的理解 171
技巧240对递归的理解 171
技巧241对递归factorial函数的理解 172
技巧242另一个递归例子 173
技巧243通过显示数值进一步理解递归 174
技巧244直接递归和间接递归 175
技巧245使用或不使用递归 175
技巧246为什么递归函数要慢 177
技巧247如何取消递归 177
技巧249传递具体的数组元素 178
技巧248把串传递给函数 178
技巧250对参数中const的理解 179
技巧251使用const不能防止参数的改变 180
技巧252解决名字冲突问题 180
技巧253对无界串说明的理解 181
技巧254 比较指针声明和串声明 182
技巧255如何在堆栈中使用串参数 183
技巧256对外部变量的理解 183
技巧257 extern的使用 184
技巧258对外部静态变量的理解 185
技巧259对volatile关键字的理解 186
技巧260对调用帧(CallFrame)和基地址指针(BP)的理解 186
技巧261调用汇编语言函数 187
技巧262从汇编语言函数中返回数值 189
技巧265对auto关键字的理解 190
技巧264不使用参数的函数 190
技巧263不返回结果的函数 190
技巧266理解C的域(SCOPE) 191
技巧267对命名区(Name Space)和标识符的理解 191
技巧268对标识符可视性(Visibilily)的理解 192
技巧269理解变量寿命(Duration) 192
技巧270支持参数个数不定的函数 193
技巧271支持个数不定的参数 193
技巧272 Va_start,Va_arg和Va_end是如何工作的 194
技巧273建立支持多种类型多种参数的函数 195
技巧274对函数的理解 197
技巧275在函数中使用变量 198
技巧276 main也是函数 199
技巧277参数使用初步 199
技巧278使用多个参数 201
技巧280从函数中返回结果 202
技巧279旧C程序中的参数声明 202
技巧281 return语句的理解 204
技巧282对函数原型的理解 204
技巧283对运行库的理解 205
技巧284对形式参数和实参数的理解 206
技巧285对作用域的理解 207
第五章热键和屏幕I/O 209
技巧286从键盘上读字符 209
技巧287显示字符 210
技巧288对缓冲区输入的理解 210
技巧289把键盘输入内容赋给串 211
技巧290把getchar和putchar结合起来使用 212
技巧291记住,getchat和putchar都是宏 212
技巧292用直接I/O来读入字符 213
技巧294使用‘\r’和‘\n’ 214
技巧293字符不回显的直接键盘输入 214
技巧295执行直接输出 215
技巧296将输入的字符放回到键盘缓存区中 216
技巧 297 使用cprintf来快速格式化输出 217
技巧298快速的格式化键盘输入 219
技巧299写字符串 219
技巧300使用直接I/O快速输出字符串 221
技巧301 从键盘上读字符串 222
技巧 302字符串的快速输入 222
技巧303输出彩色文本 223
技巧304清除屏幕内容 224
技巧305清除当前行的内容直到行尾 224
技巧306删除当前行的内容 224
技巧307 屏幕光标的定位 225
技巧308获得当前光标的行和列位置 226
技巧309在屏幕上插入空行 227
技巧 310把屏幕的文本内容复制到内存中 228
技巧311 将保存的文本恢复到屏幕上 229
技巧312获得文本模式的设置参数 230
技巧313控制屏幕的颜色 231
技巧314设置背景颜色 232
技巧315使用 textcolor设置前景颜色 233
技巧316使用textbackground设置背景颜色 235
技巧317控制字符亮度 236
技巧318获得当前的文本显示模式 236
技巧319在屏幕上移动文本 237
技巧320定义文本窗口 238
第六章计算 240
技巧321求整数表达式的绝对值 240
技巧322反余弦值的计算 241
技巧323反正弦值的计算 241
技巧324反正切值的计算 242
技巧325复数绝对值的计算 243
技巧326浮点数的向上取整 244
技巧327余弦值的计算 244
技巧328双曲余弦的计算 245
技巧329执行整数除法 246
技巧330幂的计算 247
技巧331浮点数绝对值的计算 247
技巧332浮点除法余数的计算 248
技巧333浮点数的有效数和指数的使用 249
技巧334计算X*2?的结果 250
技巧335 自然对数的计算 251
技巧336 log10x的计算 252
技巧337求数的最大值和最小值 252
技巧338把浮点值分成整数部分和小数部分 253
技巧339 Xn幂的计算 254
技巧340 10x的计算 255
技巧341 随机数的产生 256
技巧342产生一个指定范围的随机数 257
技巧343指定随机数产生种子 257
技巧344正弦值的求解 258
技巧345双曲正弦的计算 259
技巧346平方根的计算 260
技巧347正切值的计算 260
技巧348双曲正切的计算 261
技巧349建立自己的数学错误句柄 261
第七章文件、目录和磁盘 264
技巧350判断当前盘号 264
技巧351 设置指定驱动器为当前盘 264
技巧352判断有效的磁盘空间 265
技巧353 对DBLSPACE的认识 266
技巧354读文件分配表(FAT)的信息 267
技巧356对扇区进行绝对的读写 268
技巧355对磁盘ID的理解 268
技巧357基于BIOS磁盘I/O操作 269
技巧358测试软盘驱动器是否就绪 271
技巧359将格式化的信息输出到文件 271
技巧360文件更名 272
技巧361删除文件 273
技巧362判断文件的存取权限 274
技巧363设置文件的存取方式 276
技巧 364进一步控制文件属性 277
技巧365对文件流错误的测试 279
技巧366获得文件的大小 281
技巧367清理I/O流 282
技巧368一步关掉所有打开的文件 282
技巧369得到文件流的文件句柄 283
技巧370使用p_tmpdir建立临时文件 284
技巧372建立真正的临时文件 285
技巧371 使用TMP或TEMP建立临时文件名 285
技巧373删除临时文件 286
技巧374在命令行定义的路径中搜索文件 286
技巧375 在DOS环境变量的目录列表中搜索文件 287
技巧376在TEMP目录中打开文件 288
技巧377减少文件I/O的操作 289
技巧378对目录名中斜杠的认识 290
技巧379改变当前目录 290
技巧380创建目录 291
技巧381删除目录 292
技巧382删除目录树 292
技巧383建立一个完整的路径名 295
技巧384分解带路径的文件名 296
技巧 385建立路径名 297
技巧386使用低级函数来打开和关闭文件 298
技巧387创建文件 300
技巧388执行低级的读和写操作 301
技巧389测试文件末尾 302
技巧390低级文件操作函数的使用 302
技巧391指定文件的翻译模式 303
技巧392使用Iseek定位文件指针 304
技巧393打开20个以上的文件 304
技巧394使用基于DOS的文件服务 305
技巧395获得文件的日期和时间 306
技巧396使用位字段来获得文件的日期和时间 308
技巧397设置文件的日期和时间记录 309
技巧398把文件日期和时间的记录设置为当前日期和时间 311
技巧399一次只读写一个字 311
技巧400改变文件的大小 313
技巧401控制读写文件的打开操作 314
技巧402指定一个文件缓冲器 316
技巧403分配文件缓冲区 317
技巧404使用mktemp来建立专门的文件名 318
技巧405读和写结构变量 319
技巧406从一个文件流中读结构中的数据 321
技巧407复制文件句柄 323
技巧408强制文件句柄的设置 324
技巧409将文件句柄与文件流相关联 325
技巧410对文件共享的理解 325
技巧411打开可共享存取文件 326
技巧412锁定文件的内容 327
技巧413灵活的文件锁定控制 329
技巧414使用DOS目录 331
技巧415打开一个目录 331
技巧416读目录项 332
技巧417 目录操作综合例子—读C:\DOS 332
技巧419递归读取磁盘文件 333
技巧418目录复位 333
技巧420确定当前文件指针的位置 335
技巧421打开共享文件流 336
技巧422在指定目录中建立专门文件 337
技巧423创建新文件 338
技巧424使用fopen打开文件 339
技巧425对FILE结构的理解 340
技巧426关闭打开的文件 341
技巧427每次读写信息的一个字符 342
技巧428对文件指针中位置指针的理解 343
技巧429确定当前文件位置 343
技巧430对文件流的理解 344
技巧431对文件翻译模式的理解 344
技巧432对CONFIG.SYS FILES=Entry的理解 345
技巧433低级和高级文件I/O 346
技巧434对文件句柄的理解 346
技巧436显示文件处理表的内容 347
技巧435对文件处理表的理解 347
技巧437理解系统文件表 349
技巧438显示系统文件表 349
技巧439对流指针和文件句柄关系的理解 352
技巧440打开20个以上的文件 353
技巧441 使用DOS服务来存取文件 353
技巧442强制打开二进制文件或文本文件 356
技巧443读和写文本文件行 356
技巧444 fgets和fputs的使用 357
技巧445强制二进制文件的转化 358
技巧446 为什么TEXTCOPY不能复制二进制文件 358
技巧447测试文件的结束(文件尾) 358
技巧448退回一个字符 359
技巧449格式化的读取文件数据 359
技巧450文件指针的相对移动 360
技巧451获得文件句柄信息 361
技巧452重新打开文件流 363
第八章数组、指针和结构 364
技巧453对数组的理解 364
技巧454声明一个数组 364
技巧455对数组图示 365
技巧456对数组内存要求的理解 366
技巧457数组的初始化 366
技巧458存取数组元素 367
技巧459遍历数组元素 368
技巧460使用常量来定义数组 369
技巧461把数组传递给函数 370
技巧462不同大小的数组参数 370
技巧463串数组如何区分 371
技巧464 在堆栈中传递数组………………………………………………………………………(3??)技巧465 一个数组能存贮多少元素 372
技巧466使用大数组时的内存模式 372
技巧467数组与动态内存的折衷比较 373
技巧469对行和列的理解 374
技巧 468对多维数组的理解 374
技巧470 存取二维数组中的元素 375
技巧 471 初始化二维数组中的元素 375
技巧472确定多维数组所需的内存数量 376
技巧 473遍历二维数组 377
技巧474遍历三维数组 378
技巧475初始化多维数组 378
技巧 476传递二维数组给函数 379
技巧477把多维数组作为一维数组来处理 380
技巧478C是如何存贮多维数组的 381
技巧 479行主排序与列主排序的比较 382
技巧480结构数组的数组 383
技巧481 对联合(UNION)的理解 383
技巧 482使用联合来节省存贮器 384
技巧483使用REGS??一种典型的联合 385
技巧484 使用REGS联合 386
技巧485对位域的理解 387
技巧486位域结构的直观理解 389
技巧487位域结构所能够存贮数值的范围解 389
技巧488在数组中查找一个具体数值 390
技巧489对二分法检索的理解 390
技巧490使用二分法检索 391
技巧491给数组排序 392
技巧492对气泡排序的理解 392
技巧493气泡排序的使用 393
技巧494对选则排序的理解 394
技巧495选则排序的使用 395
技巧496对希尔排序的理解 396
技巧 497希尔排序的使用 397
技巧498对快速排序的理解 399
技巧499快速排序的使用 399
技巧501字符串数组的排序 401
技巧500 上述排序中的一些问题 401
技巧502使用lfind来检索数组 402
技巧503使用lsearch检索数值 404
技巧504使用bsearch来检索已排序数组中的元素 405
技巧505使用qsort进行数组排序 407
技巧506确定数组元素的数目 408
技巧507一个指针是一个地址 409
技巧508确定变量地址 409
技巧509 C把数组作为指针来处理 410
技巧510数组中使用地址运算符( ) 410
技巧511声明指针变量 411
技巧512指针的反向引用 412
技巧513使用指针值 413
技巧514在函数参数中使用指针 413
技巧516指针的增量与减量操作 414
技巧515指针运算 414
技巧517把指针引用和增量结合起来 415
技巧518使用指针遍历串 415
技巧519返回指针的函数 416
技巧520建立返回指针的函数 416
技巧521对指针数组的理解 417
技巧522字符串数组的直观理解 418
技巧523遍历字符串数组 418
技巧525指向字符串指针的指针的使用 419
技巧524把字符串数组作为指针来处理 419
技巧526使用指针来定义一个字符串常量 420
技巧527对void指针的理解 420
技巧528函数的指针 421
技巧529函数指针的使用 421
技巧530指向指针的指针的指针 422
技巧531对结构的理解 423
技巧533结构标识符就是结构名 424
技巧532结构是变量定义的模板 424
技巧534用不同的方法来定义结构变量 425
技巧535对结构成员的理解 425
技巧536结构的形象化理解 426
技巧537结构的使用 426
技巧538给函数传递结构变量 427
技巧539改变函数中的结构 428
技巧540理解(*pointer).member的间接引用 429
技巧541 pointer—>member格式的使用 430
技巧542使用无标识(tag)的结构 431
技巧543结构定义的作用域 432
技巧544初始化结构变量 432
技巧545执行结构I/O 433
技巧546使用嵌套结构 433
技巧548建立结构数组 434
技巧547含有数组的结构 434
第九章DOS和BIOS服务 436
技巧549理解DOS的系统服务 436
技巧550理解BIOS服务 436
技巧551理解寄存器 437
技巧552理解标志寄存器 438
技巧553理解软件中断 439
技巧554使用BIOS驱动打印机 440
技巧555 Ctrl_Break信息 442
技巧556 DOS的边效应(Side Effects) 442
技巧557临时中止一个程序 443
技巧558加上声音效果 443
技巧559取得国别信息 444
技巧560磁盘传输地址的理解 446
技巧561 存取及控制DTA 447
技巧562使用BIOS的键盘服务 448
技巧563获取DOS的设备列表 449
技巧564 串口I/O 451
技巧565用bdos获得DOS服务 454
技巧566获取扩展的DOS错误信息 454
第十章内存管理 457
技巧567显示BIOS常规内存数量 457
技巧568将远地址分成段地址和偏移地址 457
技巧569建立一个远指针(far pointer) 458
技巧570确定可用的内存 459
技巧571读取段寄存器的内容 460
技巧572理解内存类型 461
技巧573常规内存的理解 461
技巧574理解常规内存的安排 461
技巧575常规内存的使用 462
技巧576 为什么PC以及DOS被限制在1Mb以下 462
技巧578理解扩充内存 463
技巧577 PC怎样结合段和偏移量来构造一个真正的地址 463
技巧579使用扩充内存 464
技巧580扩展内存的理解 464
技巧581实模式和保护模式的理解 464
技巧582访问扩展内存 465
技巧583高内存区的理解 465
技巧584栈的理解 466
技巧585理解不同的栈配置 466
技巧586判断程序当前栈空间 466
技巧587用_stklen控制栈空间 467
技巧588限定内存范围 467
技巧589把一块内存中的内容拷贝到另一块内存中 468
技巧590拷贝内存区间直到遇到指定字节 468
技巧591 比较两个无符号字符数组 469
技巧592交换字符串中的相邻字节 470
技巧593分配动态内存 471
技巧594内存指针类型 472
技巧595释放不再需要的动态内存 473
技巧596用calloc分配内存 474
技巧597堆的理解 475
技巧598突破64Kb的堆限制 476
技巧599从栈中分配内存 477
技巧600为巨型数据分配内存 479
技巧601改变已分配内存的大小 480
技巧602理解brk 480
技巧603堆的检测 481
技巧604快速堆检验 481
技巧605填充未用的堆空间 483
技巧606检查指定的堆入口 484
技巧607寻访堆入口 486
技巧608访问指定的内存位置 487
技巧609往内存中写数据 488
技巧610理解PC端口 489
技巧611存取端口的数值 490
技巧612 CMOS的理解 490
技巧613内存模式的理解 492
技巧614微内存模式的理解 492
技巧615小内存模式的理解 493
技巧616中内存模式的理解 493
技巧617紧凑内存模式的理解 494
技巧618大内存模式的理解 495
技巧619巨内存模式的理解 496
技巧620判断当前的内存模式 497
第十一章日期和时间 499
技巧621 获得从1970年1月1日算起以秒为单位的日期和时间值 499
技巧622把日期和时间从秒转换成ASCII码格式 500
技巧623标准时间调整 500
技巧625显示程序的运行时间 501
技巧624延迟指定的毫秒数 501
技巧626比较两个时间 502
技巧627获取日期字符串 503
技巧628获得时间字符串 504
技巧629读BIOS计时器 504
技巧630使用本地时间 506
技巧631 使用格林尼治标准时间 507
技巧632获得DOS系统时间 508
技巧633获得DOS系统日期 509
技巧634设定DOS系统时间 511
技巧635设定DOS系统日期 512
技巧636把DOS日期转换为UNIX格式 513
技巧637获得本地时和格林尼治标准时的时差 514
技巧638确定当前所在的时区 514
技巧640使用TZ环境变量 515
技巧639用tzset设定时区 515
技巧641在程序中设定TZ环境变量 516
技巧642获得时区信息 517
技巧643 以自1970年1月1日起算的秒数设定系统时间 518
技巧644把日历时间转化为自1970年1月1日零时起算的秒数 519
技巧645判断当前日期的儒略(Julian)日 520
技巧646建立格式化的日期和时间串 521
技巧647理解PC的时钟类型 523
第十二章I/O定向和命令行处理 524
技巧648等待压键 524
技巧649提示用户键入密码 524
技巧650写自己的密码输入函数 525
技巧651理解输出重定向 527
技巧652理解输入重定向 527
技巧653综合使用输入和输出重定向 527
技巧654使用标准输入(stdin)和标准输出(stdout) 528
技巧656理解getchar和putchar 529
技巧655理解管道操作符 529
技巧657给重定向的输入编号 530
技巧658确认一个信息显示在屏幕上 530
技巧659建立自己的MORE命令 532
技巧660显示被定向的行数 533
技巧661显示I/O重定向的字符数 534
技巧662一个定时的MORE命令 534
技巧663制止I/O重定向 536
技巧664使用标准打印(stdprn)文件句柄 537
技巧665把一个重定向输出给一个文件 537
技巧666使用标准辅助文件句柄 538
技巧667找出在重定向输入中的某字符串 539
技巧668显示重定向输入内容的前几行 539
技巧669理解命令行选项 540
技巧671显示命令行 541
技巧670显示命令行参数数目 541
技巧672在命令行中使用引号引起来的参数 542
技巧673用命令行参数来显示指定文件内容 542
技巧674把argv看作一个指针 543
技巧675 C怎样知道命令行 544
技巧676理解环境 544
技巧677把env看作一个指针 545
技巧678使用void作main的参数 545
技巧680理解程序退出(Exit)状态值 546
技巧679使用命令行中的数字 546
技巧681使用return处理退出状态值 548
技巧682为什么声明main为void 549
技巧683在环境中搜索特定变量(entry) 549
技巧684 DOS怎样看待环境 550
技巧685使用全局变量environ 551
技巧686在当前环境中增加一项 552
技巧688放弃当前运行的程序 553
技巧687在DOS环境中增加一项 553
技巧689定义在程序终止时运行的函数 554
第十三章编程工具 556
技巧690理解库 556
技巧691 目标代码的重复使用 556
技巧692编译C和OBJ文件中的问题 557
技巧693建立库文件 557
技巧694公共库操作 558
技巧695列出库文件中的函数 558
技巧696使用库来减少程库的编译时间 559
技巧697进一步理解库程序 559
技巧698理解连接器 559
技巧699了解连接器的功能 560
技巧700使用连接图 560
技巧701使用连接器响应文件 560
技巧703生成一个简单的MAKE文件 561
技巧702用MAKE建立的简单应用 561
技巧704多支持文件和MAKE 563
技巧705注释你的MAKE文件 563
技巧706命令行和MAKE 563
技巧707把多个支持文件放在一个MAKE文件中 564
技巧708明示(Explicit)和暗示(Impticit)的MAKE规则 564
技巧709使用MAKE的宏 565
技巧710定义MAKE宏 565
技巧711 MAKE的条件执行 566
技巧712检验MAKE宏 567
技巧713包含第二个MAKE文件 567
技巧714使用MAKE宏修饰符 567
技巧715结束一个MAKE文件并返回错误信息 568
技巧716不显示所执行的命令名 568
技巧719同时调用和改变宏 569
技巧718在MAKE中处理命令执行后的退出状态 569
技巧717 使用文件BUILTINS.MAK 569
技巧720对多个支持文件执行同一条MAKE命令 570
第十四章 高级C技巧 571
技巧721判断当前机器内是否有数学协处理器 571
技巧722理解ctype.h中的is类宏 571
技巧723直接控制视屏显示 572
技巧724检查系统和数学错误 572
技巧725显示预定义的错误信息 573
技巧726确定操作系统的版本号 574
技巧727理解可移植性 575
技巧728执行非局部的跳转 575
技巧729获得进程ID(PID) 576
技巧730调用DOS内部命令 577
技巧731使用PSP全局变量 577
技巧733使用枚举型变量 579
技巧732在变量定义使用const修饰符 579
技巧734如何使用枚举型 580
技巧735理解枚举值 580
技巧736为枚举型的成员赋值 581
技巧737保存和恢复寄存器 581
技巧738动态链表初步 582
技巧739定义一个链表结构 582
技巧740构造一个链表 583
技巧741简单链表举例 583
技巧742理解链表遍历 584
技巧743构造一个更有趣的链表 584
技巧744给链表添加一个节点 586
技巧745插入一个链表节点 586
技巧746显示一个排序后的目录 587
技巧747删除表中的一个节点 588
技巧749建立一个简单的双链表 590
技巧748使用双链表 590
技巧750理解node—>previous—>next 592
技巧751从双链表中删除一个节点 592
技巧752往双链表中插入一个节点 594
技巧753理解子进程 596
技巧754创建一个子进程 596
技巧755使用其它的spawnlxx函数 598
技巧756使用spawnvxx函数 598
技巧757载入一个子进程 600
技巧758使用其它的execlxx函数 601
技巧759使用execvxx函数 603
技巧760理解覆盖 604
技巧761理解中断 604
技巧762 PC机中断 605
技巧763使用interrupt关键字 606
技巧765设置中断向量 607
技巧764确定中断向量 607
技巧766中断的关闭和打开 608
技巧767建立一个简单的中断处理程序 608
技巧768链接第二个中断 609
技巧769产生一个中断 611
技巧770 PC定时器俘获 612
技巧771理解严重错误 613
技巧772 C中的严重错误处理程序 614
技巧773一个更完善的严重错误处理程序 615
技巧774恢复被替换的中断 616
技巧775建立Ctrl—Break处理程序 616
技巧776严重错误处理程序能干什么 617
技巧777选择合适的指令集以提高性能 618
技巧778内部函数代码内嵌化 618
技巧780理解快速函数调用 619
技巧779函数代码内嵌化的设置 619
技巧781 _fastcall参数传递规则 620
技巧782理解不变代码 621
技巧783理解重复加载压缩 621
技巧784理解代码压缩 622
技巧785理解循环压缩 622
技巧786理解循环归纳和强度压缩 623
技巧787理解消除公用子表达式 623
技巧788理解标准的类型转换 624
技巧789理解C的四种基本类型 624
技巧790基本的和派生的类型 624
技巧791理解初始化值 625
技巧792理解链接 625
技巧793理解暂时性声明 625
技巧795理解左值 626
技巧794声明和定义的比较 626
技巧796理解右值 627
技巧797使用段寄存器关键字 627
技巧798注意远指针 628
技巧799理解正规化指针 628
技巧800数学协处理器语句 629
技巧801理解cdecl型变量和pascal型变量 629
技巧802防止循环包含 630
第十五章C++初步 631
技巧803什么是C++? 631
技巧804 C++源文件与原来什么不同? 631
技巧805从一个简单的C++程序开始 631
技巧806理解coutI/O流 632
技巧807用cout输出数值和变量值 633
技巧808用cout同时输出不同类型的值 633
技巧810重定向cout 634
技巧809显示十六进制和八进制值 634
技巧811如果你喜欢printf,使用printf 635
技巧812输出到cerr 635
技巧813使用cin获得输入 635
技巧814 cin怎样区分输入数据 636
技巧815 cin、cout、cerr怎样得知数值类型 636
技巧816用clog执行输出操作 637
技巧817 cin、cout、cerr和clog都是类的实例 637
技巧818用flush清除输出 637
技巧819在iostream.h中有什么? 638
技巧820 C++要求函数原型 638
技巧821 C++增加了新的关键字 638
技巧822 C++支持匿名联合 639
技巧824提供缺省参数值 640
技巧823使用全局变量 640
技巧825控制cout的输出宽度 641
技巧826用setw设置cout宽度 642
技巧827指定cout的填充字符 642
技巧828右对齐和左对齐cout输出 643
技巧829控制浮点数的显示精度 644
技巧830以定点格式或科学计数法显示数值 645
技巧831恢复cout缺省设置 646
技巧832设置I/O的进制 647
技巧833在需要变量的地方声明变量 647
技巧834在函数原型中放置参数缺省值 648
技巧835使用位操作符和cout 649
技巧836理解短路检查(Short—Circwit Evalnation) 649
技巧837 C++中的cotst关键字 650
技巧838 C++中的enum关键字 650
技巧840用new分配内存 651
技巧841为多个数组分配内存 651
技巧839理解自由内存区 651
技巧842检测自由内存区 652
技巧843理解远近自由内存区 653
技巧844使用远指针和new操作符 653
技巧845释放从自由区分配的内存 654
技巧846理解C++的引用 655
技巧847把引用传递给函数 656
技巧848注意隐蔽对象 656
技巧849传递参数的三种方法 657
技巧850引用使用的规则 658
技巧851 函数可以返回引用 658
技巧852使用C++内嵌关键字 659
技巧853使用C++的asm关键字 661
技巧854用cin语句读一个字符 661
技巧855用cout语句输出一个字符 662
技巧856一个简单的过滤程序 662
技巧858一个简单的First命令 663
技巧857一个简单的Tee命令 663
技巧859一个改进的First命令 664
技巧860测试文件的结束 664
技巧861用endl进行换行 665
技巧862理解链接指示符 666
技巧863理解重载 666
技巧864重载函数 667
技巧865另一个重载函数的例子 668
技巧866重载操作符 669
技巧867用cin一次读取一行 669
技巧868在循环中使用cin.getline 670
技巧869改变new的缺省处理 670
技巧870用set_new_handler设定新的new处理函数 671
技巧871判断编译器类型 672
技巧872结构和C++ 673
技巧873函数作为结构的成员 673
技巧875在结构外书写函数代码 674
技巧874在结构中书写函数代码 674
技巧876向成员函数传递参数 675
技巧877定义多个同一结构的变量 676
技巧878使用同一成员函数名的不同结构 676
技巧879区分同成员名的不同函数 677
技巧880理解对象 678
技巧881理解面向对象编程 678
技巧882理解C++的类 679
技巧883在变量定义中使用或省略class 680
技巧884理解public:标号 680
技巧885理解信息隐藏 681
技巧886使用private:标号 681
技巧887使用公有和私有数据 682
技巧888隐藏什么,公开什么 683
技巧889公有方法通常被称为接口函数 683
技巧890在类外部定义类函数 684
技巧891在类的内部和外部定义方法 685
技巧892理解对象实例 685
技巧893对象实例应共享代码 686
技巧894理解构造函数 687
技巧895使用构造函数 688
技巧896构造函数没有返回值 689
技巧897解决构造函数的参数名冲突问题 689
技巧898用构造函数分配内存 690
技巧899用简洁的方法处理内存分配问题 692
技巧900构造函数的缺省参数值 693
技巧901重载构造函数 694
技巧902了解类的作用域 695
技巧903理解析构函数 695
技巧904建立一个类变量数组 697
技巧905构造函数和类对象数组 698
技巧907重载加法操作符 699
技巧906重载操作符 699
技巧908重载减法操作符 700
技巧909理解抽象 702
技巧910为类分配一个指针 702
技巧911释放一个类指针 703
技巧912理解封装 705
技巧913清除输入串中的头部空格 705
技巧914理解类库 706
技巧915在头文件中定义你的类 706
技巧916对类的成员函数使用inline关键字 706
技巧917初始化类对象数组 706
技巧918内嵌代码可以修改 708
技巧919公有、私有和保护部分的出现顺序并不重要 708
技巧920缺省情况下,每个成员是私有的 709
技巧921理解静态存储 709
技巧922用stdio同步I/O流操作 709
技巧924理解C++的输出流 710
技巧923理解C++的I/O流 710
技巧925理解C++的输入流 711
技巧926打开一个文件流 711
技巧927关闭一个文件流 712
技巧928读写文件流 712
技巧929检查文件操作的结果 713
技巧930将文件流操作结合在一起 713
技巧931完成二进制文件拷贝 714
技巧932控制文件流指针 715
技巧933理解字符串流 715
技巧934理解ends操作符 716
第十六章面向对象的C++ 717
技巧935理解多态性 717
技巧936从其他对象中调用另一个对象 717
技巧938告诉编译器一个未声明的类 718
技巧937理解友员 718
技巧939声明类Reader为友员 719
技巧940省去class class—name语句 720
技巧941限制友员的访问 720
技巧942名字冲突与友员 722
技巧943理解继承性 723
技巧944理解基类和派生类 723
技巧945 C++中的继承性 723
技巧946派生一个类 725
技巧947理解基类和派生类的构造函数 725
技巧948理解被保护成员 726
技巧949使用被保护成员 726
技巧950何时需要保护 728
技巧951理解多重继承性 728
技巧952一个简单的多重继承性范例 728
技巧953构造函数的次序和基类 729
技巧954说明某一基类为私有 731
技巧955析构函数与多重继承性 732
技巧956基类与派生类的名字冲突 733
技巧957解决派生类和基类的名字冲突 734
技巧958重载<<操作符 735
技巧959互为友员 736
技巧960理解继承性 738
技巧961一个派生类可以成为其他类的基类 738
技巧962在派生类中使用被保护的成员 739
技巧963静态类数据 740
技巧964初始化静态数据成员 742
技巧965直接访问静态数据成员 743
技巧966静态私有数据成员 743
技巧967理解静态成员函数 744
技巧968直接访问公用静态函数 745
技巧969更有意义的类成员 746
技巧970类的嵌套 747
技巧972在方法函数中内嵌汇编语句 748
技巧971理解子类和超类 748
技巧973类的成员可以递归 749
技巧974理解this指针 750
技巧975 this指针是如何根据函数的不同而不同的 751
技巧976静态链接与动态链接的理解 751
技巧977指向类的指针 751
技巧978使用同一指针指向不同的类 752
技巧979同名基类和派生类成员在使用指针时的冲突 753
技巧980理解虚函数 754
技巧981实现多态性 755
技巧982理解纯虚函数 756
技巧983理解抽象类 757
技巧984重载cout的插入操作符 757
技巧985定义一个输出流的操作符 758
技巧987对类使用sizeof运算符 759
技巧986看一看iostream.h头文件 759
技巧988私有、公有和保护属性也能用于结构 760
技巧989理解类的数据转换 761
技巧990在一个构造函数中转换数据 762
技巧991将类赋给其它变量 763
技巧992用友员进行转换 765
技巧993确定操作符重载是否增加了程序的可读性 765
技巧994理解使用_withassign的I/O流 766
技巧995理解异常处理 766
技巧996理解模板 767
技巧997应用一个简单的模板 768
技巧998支持多种类型的模板 769
技巧999模板放在何处 770
技巧1000模板也能减少重复的类 770
技巧1001理解生成类 771