1. 在声明一个简单变量和数组时使用关键字const很简单。指针则要复杂一些,因为不得不把让指针本身成为const与让指针指向的值成为const区分开来。下面的声明表明pf指向的值必须是不变的: 但pf本身的值可以改变。例如,它可以指向另一个const值。相反,下面的声明表明指针pt本身的值不可以改变: 它必须总是指向同一个地址,但所指向的值可以改变。最后,下面的声明:
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8154-8160的标注 2015-03-24 20:26:40
2. 意味着ptr必须总是指向同一个位置,并且它所指位置存储的值也不能改变。 还有第三种放置const关键字的方法: 正如注释所表示的那样,把const放在类型名的后边和*的前边,意味着指针不能够用来改变它所指向的值。总而言之,一个位于*左边任意位置的const使得数据成为常量,而一个位于*右边的const使得指针自身成为常量。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8160-8165的标注 2015-03-24 20:26:55
3. 在文件之间共享const数据时要小心。可以使用两个策略。首先是遵循外部变量的惯用规则:在一个文件中进行定义声明,在其他文件中进行引用声明(使用关键字extern):
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8177-8179的标注 2015-03-24 20:31:52
4. 其次是将常量放在一个include文件中。这时还必须使用静态外部存储类: 如果不使用关键字static,在文件filel.c和file2.c中包含constant.h将导致每个文件都有同一标识符的定义声明,ANSI标准不支持这样做(然而,一些编译器的确支持这样做)。通过使每个标识符成为静态外部的,实际上给了每个文件一个独立的数据拷贝。如果文件想使用该数据来与另一个文件通话,这样做就不行了,因为每个文件都只能看到它自己的拷贝。然而,由于数据是不变的(通过使用关键字const)和相同的(通过使两个文件都包含同样的头文件),这就不是问题了。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8180-8186的标注 2015-03-24 20:34:32
5. 限定词volatile告诉编译器该变量除了可被程序改变以外还可被其他代理改变。典型地,它被用于硬件地址和与其他并行运行的程序共享的数据。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8189-8191的标注 2015-03-24 20:41:46
6. 一个值可以同时是const和volatile。例如,硬件时钟一般设定为不能由程序改变,这一点使它成为const;但它被程序以外的代理改变,这使它成为volatile的。只需在声明中同时使用这两个限定词,如下所示;顺序并不重要:
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8202-8204的标注 2015-03-24 21:00:02
7. ANSI C提供了文件的两种视图:文本视图和二进制视图。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8337-8337的标注 2015-03-24 21:12:00
8. MS-DOS文本文件用回车符和换行符的组合\r\n来表示行尾。Macintosh文本文件只用一个回车符\r来表示行尾。C程序使用一个\n表示行尾。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8342-8343的标注 2015-03-24 21:14:38
9. 用标准输入为您的程序提供输入是很自然的事情,它是getchar()、gets()和scanf()读取的文件。标准输出是常用的程序输出对象,为putchar()、puts()和printf()所使用。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8361-8362的标注 2015-03-24 21:17:08
10. 表13.1 fopen()函数的模式字符串 模式字符串 意 义 “r” 打开一个文本文件,可以读取文件 “w” 打开一个文本文件,可以写入文件,先将文件的长度截为零。如果该文件不存在则先创建之 “a” 打开一个文本文件,可以写入文件,向已有文件的尾部追加内容,如果该文件不存在则先创建之 “r+” 打开一个文本文件,可以进行更新,也即可以读取和写入文件 “w+” 打开一个文本文件,可以进行更新(读取和写入),如果该文件存在则首先将其长度截为零; 如果不存在则先创建之 “a+” 打开一个文本文件,可以进行更新(读取和写入),向已有文件的尾部追加内容,如果该文 件不存在则先创建之;可以读取整个文件,但写入时只能追加内容 “rb”, “wb”, “ab”, “ab+”, “a+b”, “wb+7rd;, “w+b”, “ab+”, “a+b” 与前面的模式相似,只是使用二进制模式而非文本模式打开文件 对于像Unix和Linux这样只有一种文件类型的系统,带b字母的模式和对应的不带b字母的模式是相同的。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8399-8413的标注 2015-03-25 21:31:23
11. 磁盘已满、文件名非法、存取权限不够或者硬件问题等都会导致fopen()函数执行失败。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #8423-8424的标注 2015-03-25 21:33:12
12. 在UNIX系统中,尖括号告诉预处理器在一个或多个标准系统目录中寻找文件。双引号告诉预处理器先在当前目录(或文件名中指定的其他目录)中寻找文件,然后在标准位置寻找文件。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #10372-10373的标注 2015-07-01 22:58:38
13. 改变一些#define宏的值后,这些代码就可以被从一个系统移植到另一个系统。#undef指令取消前面的#define定义。#if、#ifdef、#ifndef、#else、#elif,和#endif指令可用于选择什么情况下编译哪些代码。#line指令用于重置行和文件信息,#error指令用于给出错误消息,#pragma指令用于向编译器发出指示。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #10433-10436的标注 2015-07-01 23:05:44
14. 宏 意 义 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字) __FILE__ 代表当前源代码文件名的字符串文字 __LINE__ 代表当前源代码文件中的行号的整数常量
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #10519-10523的标注 2015-07-01 23:15:10
15. __STDC__ 设置为1时,表示该实现遵循C标准 __STDC_HOSTED__ 为本机环境设置为1,否则设为0 __STDC_VERSION__ 为C99时设置为199901L __TIME__ 源文件编译时间,格式为“hh: mm: ss”
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #10523-10527的标注 2015-07-01 23:15:38
16. 编译器在优化内联函数时,必须知道函数定义的内容。这意味着内联函数的定义和对该函数的调用必须在同一文件中。正因为这样,内联函数通常具有内部链接。因此,在多文件程序中,每个调用内联函数的文件都要对该函数进行定义。达到这个目标的最简单方法为:在头文件中定义内联函数,并在使用该函数的文件中包含该头文件。一般不在头文件中放置可执行代码,但内联函数是个例外。因为内联函数具有内部链接,所以在多个文件中定义同一内联函数不会产生什么问题。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #10571-10575的标注 2015-07-02 22:59:05
17. 现代计算机可分为几个部件。中央处理单元(或称CPU)担负着绝大部分的计算工作;随机访问存储器(或称RAM)作为一个工作区来保存程序和文件;永久存储器,一般是硬盘,即使在计算机关机时也能记下程序和文件;还有各种外围设备(如键盘、鼠标和监视器)用来提供人与计算机之间的通信。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #832-835的标注 2014-05-01 12:40:29
18. UNIX C不具备自己的编辑器。但您可以使用一种通用UNIX编辑器,例如emacs、jove、vi或X-Windows等文本编辑器。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #973-974的标注 2014-05-02 22:18:01
19. UNIX C编译器称为cc。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #983-983的标注 2014-05-02 22:19:21
20. cc编译器创建一个与源代码具有相同基本名但扩展名为.o的目标代码文件。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #994-995的标注 2014-05-02 22:21:55
21. 重命名。否则,该文件会被下一次编译程序时产生的一个新的a.out替代。 如何处理目标代码呢?cc编译器创建一个与源代码具有相同基本名但扩展名为.o的目标代码文件。在本例中,目标代码文件名为inform.o,但您找不到该文件,因为链接器在可执行程序被生成后将该文件删除。然而,如果原始程序使用多个源代码文件,则会保存目标代码文件。后面讨论多文件程序时,您会看到这是一个很好的主意。 1.7.3 Linux系统 Linux是一个流行的、开放源代码的、类似于UNIX的操作系统,可在包括IBM兼容机和Macintoshes在内的多种平台上运行。在
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #993-999的标注 2014-05-02 22:22:44
22. UNIX C编译器称为cc。要编译inform .c程序,您需要键入下列内容:
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #983-984的标注 2014-05-02 22:23:16
23. 在Linux上准备C程序与在UNIX系统上几乎一样,不同之处是您要使用由GNU提供的被称为gcc的公共域C编译器。编译器命令将是下面的形式:
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #999-1001的标注 2014-05-02 22:23:40
24. 编译器创建一个与源代码具有相同基本名但扩展名为.o的目标代码文件。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #994-995的标注 2014-05-02 22:23:49
25. #include语句是C预处理器指令(preprocessor directive)的一个例子。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1202-1202的标注 2014-05-30 00:21:39
26. 操作系统和C库通常使用以一个或两个下划线开始的名字
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1292-1293的标注 2014-05-30 00:30:28
27. C语言的关键字列表 ISO/ANSI C关键字 auto enum restrict unsigned break extern return void case float short volatile char for signed while const goto sizeof _Bool continue if static _Complex default inline struct _Imaginary do int switch double long typedef else register union
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1492-1508的标注 2014-06-03 00:16:56
28. 运算符:sizeof
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1567-1567的标注 2014-06-09 23:44:13
29. 对%f说明符使用.2修饰词可以精确控制输出格式,使浮点数显示到小数点后两位。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1600-1600的标注 2014-06-09 23:48:22
30. 使用scanf()函数为程序提供键盘输入
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1601-1601的标注 2014-06-09 23:48:48
31. _Complex和_Imaginary分别表示复数和虚数。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1638-1638的标注 2014-06-10 00:01:17
32. 3.16E7表示3.16乘以10的7次方
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1667-1667的标注 2014-06-19 22:16:14
33. 前缀0x或者0X表示使用十六进制值,所以16用十六进制表示为0x10或0X10。与之类似,前缀0(零)表示使用八进制。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1733-1734的标注 2014-06-19 23:00:03
34. 要用八进制而不是十进制显示整数,请用%0代替%d。要显示十六进制整数,请使用%x。如果想显示C语言前缀,可以使用说明符%#o%#x和%#X分别生成0、0x和0X前缀。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1737-1739的标注 2014-06-19 23:02:01
35. C提供3个附属关键字修饰基本的整数类型:short、long和unsigned。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1748-1748的标注 2014-07-15 00:27:19
36. 目前一般的情况是,long long类型为64位,long类型为32位,short类型为16位,.int类型为16位或32位(依机器的自然字大小而定)。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1771-1772的标注 2014-07-15 00:31:38
37. 在诸多整数类型中选择哪一种呢?请首先考虑unsigned类型。把这种类型用于计数是十分自然的事,因为此时您不需要负数,而且无符号类型可以取得比有符号类型更大的正数。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1779-1780的标注 2014-07-15 00:34:50
38. 八进制和十六进制常量通常被视为int类型。如果值过于大,编译器会试用unsigned int,如果不够大,编译器会依次试用long、unsigned long、long long和unsigned long long类型。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1801-1802的标注 2014-07-15 00:38:16
39. 要打印unsigned int数字,可以使用%u符号。打印long数值,可以使用%ld格式说明符。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1809-1809的标注 2014-07-20 18:55:29
40. %lx表示以十六进制格式打印长整数,%lo表示以八进制格式打印长整数。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1811-1812的标注 2014-07-20 18:56:09
41. 还有其他几种printf()格式。首先,可以对short类型使用h前缀,因此%hd表示以十进制显示short整数,%ho表示以八进制显示short整数。h和l前缀都可以同u结合使用以表示无符号类型。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1813-1815的标注 2014-07-20 18:57:00
42. int类型被认为是计算机处理起来最方便有效的整数类型,所以在short类型和int类型长度不同的系统中,使用int类型值进行参数传递的速度更快;
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1827-1828的标注 2014-07-20 19:00:16
43. 在ASCII码中,整数值65代表大写字母A;
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1839-1839的标注 2014-07-20 19:02:22
44. 标准ASCII码值的范围从0到127,只需7位即可表示。而char类型通常定义为使用8位内存单元,该大小容纳标准ASCII编码是绰绰有余的。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1841-1842的标注 2014-07-20 19:03:43
45. 如果不使用单引号,编译器会将T视为一个变量名;如果使用双引号,编译器将其视为一个字符串
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1857-1858的标注 2014-07-20 19:07:59
46. \a 警报(ANSIC) \b 退格 \f 走纸 \n 换行 \r 回车 \t 水平制表符 \V 垂直制表符 \\ 反斜杠(\) \' 单引号(') \" 双引号(") \? 问号(?) \0oo 八进制值(o表示一个八进制数字) \xhh 十六进制值(h表示一个十六进制数字)
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1876-1886的标注 2014-07-20 19:13:17
47. 纸符\f将活动位置移到下一页的开始处。换行符\n将活动位置移到下一行的开始处。回车符\r将活动位置移到当前行的开始处。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1895-1896的标注 2014-07-20 19:15:28
48. printf()函数使用%c说明符打印一个字符。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1925-1925的标注 2014-07-20 19:24:59
49. 通常,系统使用32位存储一个浮点数。其中8位用于表示指数及其符号,24位用于表示非指数的部分(称为尾数或有效数字)及其符号。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1998-1999的标注 2014-07-20 19:43:55
50. float类型必须至少能表示6位有效数字
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #1996-1996的标注 2014-07-20 19:45:16
51. double类型和float类型具有相同的最小取值范围要求,但它必须至少能表示10位有效数字。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2000-2001的标注 2014-07-20 19:45:44
52. double类型和float类型具有相同的最小取值范围要求,但它必须至少能表示10位有效数字。一般地,double使用64位而不是32位长度。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2000-2001的标注 2014-07-20 19:46:01
53. printf()函数使用%f格式说明符打印十进制记数法的float和double数字,用%e打印指数记数法的数字。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2023-2024的标注 2014-07-20 19:51:07
54. 基本数据类型使用 11 个关键字:int、long、short、unsigned、char、float、double、signed、_Bool、_Complex和_Imaginary。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2068-2069的标注 2014-07-20 20:00:21
55. PC机上基于DOS的系统提供16位长的short和int类型,以及32位长的long类型;而基于Windows 95的系统提供16位长的short以及32位长的int类型和long类型。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2077-2078的标注 2014-07-20 20:02:14
56. 一般地,long类型长于short类型,int类型和它们其中的一个长度相同。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2076-2077的标注 2014-07-20 20:02:19
57. 单独的unsigned等价于unsigned int。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2081-2081的标注 2014-07-20 20:03:18
58. 典型系统的整数类型大小(bit) 类型 Macintosh Metrowerks CW(默认) PC机上的Linux系统 IBM PC机上的Windows XP和Windows NT系统 ANSI C规定的最小值 char 8 8 8 8 int 32 32 32 16 short 16 16 16 16 long 32 32 32 32 long long 64 64 64 64
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2112-2124的标注 2014-07-20 20:07:32
59. 典型系统的浮点数情况 类型 Macintosh Metrowerks CW(默认) PC机上的Linux系统 IBM PC机上的Windows XP和Windows NT系统 ANSI C规定的最小值 float 6位 6位 6位 6位 -37到38 -37到38 -37到38 -37到37 double 18位 15位 15位 10位 -4931到4932 -307到308 -307到308 -37到37 long double 18位 18位 18位 10位 -4931到4932 -4931到4932 -4931到4932 -37到37
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2126-2140的标注 2014-07-20 20:09:03
60. 注意,char类型肯定是1字节,因为C把char类型的长度定义为1个字节。所以在char类型长为16位,double类型长为64位的系统中,sizeof将报告double类型有4字节长。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #2150-2151的标注 2014-07-20 20:12:20
61. 缓冲分为两类:完全缓冲(fully buffered)I/O和行缓冲(line-buffered)I/O。对完全缓冲输入来说,缓冲区满时被清空(内容被发送至其目的地)。这种类型的缓冲通常出现在文件输入中。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #5049-5050的标注 2014-11-15 15:50:02
62. 对行缓冲I/O来说,遇到一个换行字符时将被清空缓冲区。键盘
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #5051-5051的标注 2014-11-15 15:50:20
63. 一些系统也许将EOF定义为-1以外的值,但该定义总是与合法的输入字符所产生的返回值不同。如果您包括了stdio.h文件并使用EOF符号,则您就不必考虑这个数值定义。重要的是EOF代表的值表示检测到文件结尾,这个值并不是实际出现在文件中的一个符号。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #5109-5111的标注 2014-11-22 12:03:20
64. 在大多数Unix系统上,在一行的开始键入Ctrl+D会导致传送文件尾信号。许多微型计算系统将一行的开始位置键入的Ctrl+Z识别为文件尾信号,还有一些则把任意位置的Crtl+Z解释成文件尾信号。
《C Primer Plus(第5版)中文版》(普拉塔 (Prata S.)) 您在位置 #5127-5128的标注 2014-11-22 12:08:51