C基础 下载本文

内容发布更新时间 : 2024/5/3 1:12:00星期一 下面是文章的全部内容请认真阅读。

Chapter1—5

1、在C语言中,所有变量都必须先声明后使用。声明通常放在函数起始处,在任何可执行语句之前。

2、指出,printf函数并不是C语言本身的一部分,C语言本身并没有定义输入/输出功能。printf 仅仅是标准库函数中一个有用的函数而已。 3、

4、符号常量:#define 指令可以把符号名(或称为符号常量)定义为一个特定的字符串

#define 名字 替换文本 //末尾没有分号,符号常量名通常用大写字母拼写 #define后的名字在预处理阶段被替换,但#define前的名字不会被替换 5、标准库提供了一次读/写一个字符的函数,其中最简单的是 getchar 和putchar 两个函数。每次调用时,getchar 函数从文本流中读入下一个输入字符,并将其作为结果值返回。 6、EOF 定义在头文件中,是个整型数。 7、不等于运算符!=的优先级比赋值运算符=的优先级要高

8、运算符&&代表 AND(逻辑与),它仅比||高一个优先级。由&&或||连接的表达式由左至右求值,并保证在求值过程中只要能够判断最终的结果为真或假,求值就立即终止。

9、在 C 语言中,所有函数参数都是“通过值”传递的。也就是说,传递给被调用函数

的参数值存放在临时变量中,而不是存放在原来的变量中。

10、当把数组名用作参数时,传递给函数的值是数组起始元素的位置或地址——它并不复制数组元素本身。

11、在源文件中,如果外部变量的定义出现在使用它的函数之前,那么在那个函数中就没有必要使用 extern 声明。

12、如果程序包含在多个源文件中,而某个变量在 file1 文件中定义、在 file2 和 file3文件中使用,那么在文件 file2 与 file3 中就需要使用 extern 声明来建立该变量与其之间的联系。人们通常把变量和函数的 extern 声明放在一个单独的文件中(习惯上称头文件),并在每个源文件的开头使用#include 语句把所要用的头文件包含进来。

13、在ANSI C 中,如果要声明空参数表,则必须使用关键字 void 进行显式声明。 14、“定义”表示创建变量或分配存储单元,而“声明”指的是说明变量的性质,但并

不分配存储单元。

15、有关数据类型长度定义的符号常量以及其它与机器和编译器有关的属性可以在标准头文 件中找到。

16、常量表达式是仅仅只包含常量的表达式。这种表达式在编译时求值,而不在运行时

求值。

17、字符常量'\\0'表示值为 0 的字符,也就是空字符(null)。

18、字符串常量就是字符数组,字符串的内部表示使用一个空字符'\\0'作为串的结尾,因此。存储字符串的物理存储单元数比括在双引号中的字符数多一个。

19、标准库函数strlen(s)可以返回字符串参数s 的长度,但长度不包括末尾的'\\0'。

20、标准头文件中声明了 strlen 和其它字符串函数。

21、枚举是一个常量整型值的列表,例如:enum boolean { NO, YES };在没有显式说明的情况下,enum 类型中第一个枚举名的值为 0,第二个为 1,依此类推。如果只指定了部分枚举名的值,那么未指定值的枚举名的值将依着最后一个指定值向后递增。

22、不同枚举中的名字必须互不相同。同一枚举中不同的名字可以具有相同的值。

23、默认情况下,外部变量与静态变量将被初始化为 0。未经显式初始化的自动变量的值为未定义值(即无效值)。

24、一般来说,自动转换是指把“比较窄的”操作数转换为“比较宽的”操作数,并且不丢失信息的转换。

25、一个声明指定一种变量类型,后面所带的变量表可以包含一个或多个该类型的变量。 26、在声明的同时对变量进行初始化。在声明中,如果变量名的后面紧跟一个等号以及一个表达式,该表达式就充当对变量进行初始化的初始化表达式。如果变量不是自动变量,则只能进行一次初始化操作,从概念上讲,应该是在程序开始执行之前进行,并且初始化表达式必须为常量表达式。

27、标准头文件定义了一组与字符集无关的测试和转换函数。例如,tolower(c)函数将 c 转换为小写形式。语句c >= '0' && c <= '9'可以用该标准库中的函数isdigit(c)替代。 28、const 限定符也可配合数组参数使用,它表明函数不能修改数组元素的值:

int strlen(const char[]);

29、当把较长的整数转换为较短的整数或 char 类型时,超出的高位部分将被丢弃。 30、在对 unsigned 类型的无符号值进行右移位时,左边空出的部分将用 0 填补。当对 signed 类型的带符号值进行右移时,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用 0填补(即“逻辑移位”)。

31、当把 float 类型转换为 int 类型时,小数部分将被截取掉;当把 double 类型转换为 float 类型时,是进行四舍五入还是截取取决于具体的实现。

32、函数 getbits(x, p, n),它返回 x 中从右边数第 p 位开始向右数 n 位的字段。这里假定最右边的一位是第 0 位,n 与 p 都是合理的正值。

33、

34、continue 语句只用于循环语句,不用于 switch 语句。 35、internal 用于描述定义在函数内部的函数参数及变量。

34、外部变量或函数的作用域从声明它的地方开始,到其所在的(待编译的)文件的末尾结束。 35、如果要在外部变量的定义之前使用该变量,或者外部变量的定义与变量的使用不在同一个源文件中,则必须在相应的变量声明中强制性地使用关键字 extern。

36、将外部变量的声明与定义严格区分开来很重要。变量声明用于说明变量的属性(主要是变量的类型),而变量定义除此以外还将引起存储器的分配。

37、对于数组类型的外部变量,在定义时必须指定数组的长度,但 extern 声明则不一定要指定数组的长度。外部变量的初始化只能出现在其定义中。

38、用 static声明限定外部变量与函数,可以将其后声明的对象的作用域限定为被编译源文件的剩余部分。

39、static 也可用于声明内部变量。static 类型的内部变量同自动变量一样,是某个特定函数的局部变量,只能在该函数中使用,但它与自动变量不同的是,不管其所在函数是否被调用,它一直存在,而不像自动变量那样,随着所在函数的被调用和退出而存在和消失。 40、register 声明告诉编译器,它所声明的变量在程序中使用频率较高。其思想是,将register 变量放在机器的寄存器中,这样可以使程序更小、执行速度更快。 41、register 声明只适用于自动变量以及函数的形式参数.

42、过量的寄存器声明并没有什么害处,这是因为编译器可以忽略过量的或不支持的寄存器变量声明。无论寄存器变量实际上是不是存放在寄存器中,它的地址都是不能访问的。

43、变量的声明(包括初始化)除了可以紧跟在函数开始的花括号之后,还可以紧跟在任何其它标识复合语句开始的左花括号之后。以这种方式声明的变量可以隐藏程序块外与之同名的变量,它们之间没有任何关系,并在与左花括号匹配的右花括号出现之前一直存在。

44、在不进行显式初始化的情况下,外部变量和静态变量都将被初始化为 0,而自动变量和寄存器变量的初值则没有定义(即初值为无用的信息)。

45、对于外部变量与静态变量来说,初始化表达式必须是常量表达式,且只初始化一次。 46、对于自动变量与寄存器变量来说,初始化表达式可以不是常量表达式:表达式中可以包 含任意在此表达式之前已经定义的值,包括函数调用。

47、数组的初始化可以在声明的后面紧跟一个初始化表达式列表,初始化表达式列表用花括