1。注释C代码
在C语言中,使用/*注释*/来注释C代码并不是好主意,如果这段代码内部原先就有注释存在,这样做就会出问题。要在逻辑上删除一段代码,更好的办法是用#if指令:
#if 0
statements
#endif
2 。关于 NUL字节
NUL字节是指字节模式全0的字节,类型'\0'这样的字符,字符串的结尾就是以NUL字节结尾的字符。而NULL指一个其值为0的指针。他们都是整型值,其值也相同,所以他们可以互换使用。NULL在头文件stdio.h中定义,而并不存在预定义的符号NUL,你必须自行定义。
3。关于参数为数组的函数
在函数声明的数组参数中,并未指定指定数组的长度。这种格式是正确的,因为不论调用函数的程序传递给它的数组参数的长度是多少,这个函数都将照收不误。这是一个伟大的特性,它允许单个函数操纵任意长度的一维数组。这个特性不利的一面是函数没法知道该数组的长度,所以,它的值作为另一个单独的参数传递给函数。如:
int func(int array[],int count);
4。变量定义的值
变量定义后,其值是不确定的,也就是垃圾,所以我们在使用时必须先对变量进行赋值才可以使用。
5。防止数组下标溢出
绝大多数C编译器不对数组的下标的有效性进行检查,如果你读取超过数组下标的值时,这样就会破坏原先存储在这个位置的数据,这会导致多种预想不到的结果,所以你必须自行编写代码对数组的下标进行检查。
6。清空输入缓冲区
int ch;
while ( (ch = getchar()) != EOF && ch != '\n')
;
ch之所以被声明为整型,是因为EOF是一个整型,它的位数比字符类型要多,把ch声明为整型就可以防止从输入读取的字符意外地被解释为EOF,但同时,这也意味着接收字符的ch必须足够大,足以容纳EOF,这就是ch为整型的原因。
最后一句空语句“;”表示什么都不执行。
7。什么是三字母词?
三字母词就是几个字符的序列,合起来表示另一个字符,三字母词是C环境可以在某些缺少一些必须的字符集上实现。如:
??( --> [
??) --> ]
??! --> |
??< --> {
??> --> }
??~ --> ^
??= --> #
??/ --> \
??- --> ~
有些环境在编译的时候可能需要加上编译条件 “-trigraphs”选项。
8.int的取值范围
short int 至少16位,long int至少32位,至于int的究竟是16位还是32位,或者是其他值,则由编译器设计者决定。通常这个选择的缺省值是这种机器最为自然(高效)的位数。
9。 关于char的移植性
char类型变量实际上是一个小整数值。缺省的char要么是signed char,要么是unsigned char,这取决于编译器,这个事实意味着不同机器上的char可能拥有不同范围的值。所以,只有当程序所使用的char型变量位于signed char 和unsigned char的交集中,程序才可移植。因此,如果我们一开始就显示声明signed或者unsigned,可以提高程序的可移植性。
10。 指针常量与常量指针
指针常量是指指针的地址不能改变。其声明方式如下:
const char *p;//p所指向的内容不能改变
常量指针是指指针所指向数据内容不能改变。其声明方式如下:
char* const p;//p不能再赋新的指针地址
11。 NULL指针
对所有的指针变量进行显示的初始化时种好做法。在指针初始化的时候,如果知道指针将被初始化成什么地址,就把它初始化为该地址,否则就把它初始化为NULL。
浙公网安备 33010602011771号