《C/C++使用技巧1001例》PDF下载

  • 购买积分:21 如何计算积分?
  • 作  者:(美)KrisJamsa著;魏津,王路等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:1996
  • ISBN:7505336258
  • 页数:772 页
图书介绍:

第一章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