0
,那么该常量将被视为八进制数。0
的字符 \0
初始化。!=
的优先级比 &
高,加法运算符优先级比移位运算符高。if
或 while
语句后面写一个分号,如果要写,请用大括号括起来。实际上,这也是我们提倡的一种编程风格。f
是一个函数,f()
是一个函数调用语句,而 f
是一个什么也不做的语句,更精确的说,它计算函数 f
的地址,却并不调用该函数。else
问题的解决方法:else
总是与同一括号内最近的未匹配的 if
结合。int ar[12][13]
,说明 ar
数组拥有 12 个数组类型的元素,其中每个元素都是拥有 13 个整型元素的数组(而不是反过来的)。因此,sizeof(ar)
的值是 12\*13\*sizeof(int)
。sizeof
之外的其他场合,ar
总被解释为指向数组起始元素的指针。int ar[12];
,&ar
是一个指向数组的指针,而 ar
是指向数组首元素的指针。int *p;
对指针的声明解释方式应该是 *p
是一个整型值,所以 p
就是一个指向整型元素的指针。\0
的内存区域的地址。malloc
函数可能无法开辟足够的空间,因此可能返回空指针。然而,即使开辟成功,也应在使用完毕后及时释放该空间。strlen(s)+1
。extern char hello[];
和 extern char *hello;
。#define NULL 0
。&&
(若左边为假,则不会对右边求值),||
(和 &&
一样,先对左侧求值,只在需要时才对右侧操作数求值),?:
(eg:a:b?c;
先对 a
求值,再根据 a
的值决定对 b
还是 c
进行求值),,
(逗号,先对左侧求值,然后该值被丢弃,再对右侧操作数求值)。实际上,C 语言只有这四种运算符存在规定的求值顺序,其他运算符对其操作数的求值顺序是未定义的。f
需要两个参数,则 f(x,y);
的求值顺序是未定义的;而函数 g
只需要一个参数,则 g(x,y)
先对 x
求值,然后将其丢弃,再对 y
求值。特别地,赋值运算符并不保证任何求值顺序。main
函数如果不写返回值,默认为 int
。一个返回值为整型的函数如果返回失败,实际上隐式地返回了某个「垃圾」整数,只要该值不被用到,就无关紧要。但有些情况下对于 main
的返回值却并非如此,大多数 C 语言实现都通过 main
返回值来告知操作系统该操作是成功还是失败。典型的处理方案是,返回值为 0 代表执行成功,非0代表失败。如果该程序被别的程序调用,且 main
没有返回值,那么有可能看上去执行失败,得到令人惊讶的结果。static
定义的变量(或函数)的作用域值局限于本文件内,其他文件是不可见的。float
,short
或 char
类型的参数,在声明中可以省略其参数类型的说明。external
声明它,则他们的类型必须相同(这是程序员的责任)。尤其注意,不要定义为 char name[];
而声明为 char *name;
。char c; (c=getchar())!=EOF;
,c
被声明为 char
类型,而不是 int
类型,这意味着:c无法容纳所有可能的字符,特别是,可能无法容纳 EOF。一种可能是,某些合法的字符被「截断」后使得 c
的值与 EOF 相同;另一种可能是,c
根本无法取得 EOF 的值。对于前一种情况,文件将在复制的中途终止;对于后一种情况,程序将陷入死循环。但实际上,可能还有第三种情况,就是编译器直接在 while
中比较 getchar()
的返回值和 EOF,而不是将 c
拿来比较,这样的话,程序看起来「似乎」能够正确运行。fseek()
函数的调用。signal()
库函数,作为捕获异步事件的一种方式。(要使用它,需引入 signal.h
头文件)。print_fields
和 print_float
,或者 State
和 STATE
,这样的命名就不恰当。short
,int
,long
):
int
)足够大以容纳任何数组下标;c
是一个字符变量,想用 (unsigned)c
将其转化为无符号整数,这时会失败的。因为在字符c转化为无符号整数时,c
首先会被转化为 int
型整数,而此时可能得到非预期的结果。正确的方式是 (insigned char)c
,因为 unsigned char
类型的字符在转化为无符号整数是无需转化为 int
型整数,而是直接进行转化。(-1)>>1
,这个操作结果一般不可能为 0,但 (-1)/2
在大多数 C 实现上结果都是 0。q=a/b;r=a%b;
(假定 b
大于 0)。我们希望 a,b,q,r 之间维持的关系是:
q*b+r==a
,因为这是余数的定义。a
的符号,我们希望改变 q
的符号,但不会改变其绝对值。b>0
时,我们希望保证 r>=0
且 r<b
。a>=0
且 b>0
时,保证 |r|<|b|
以及 r>=0
。rand
函数有两个版本,分别是 VAX-11
(返回值范围为 0~231-1)和 AT&T
(返回值范围为 0~215-1)。如果我们用到了 rand
函数,就必须根据特定的 C 语言实现做出「剪裁」。ANSCI 标准中定义了一个常数 RAND_MAX
,它的值等于随机数的最大取值。-
转化为整数有可能溢出。【完】