在兼有值与赋值两种功能的表达式中,赋值结合次序是由右至左。上面的语句等同于 n1 = (nw = (nc = 0));
int nl, nw, nc;
nl = nw = nc = 0;
运算符||代表OR(或逻辑),运算符&&代表AND(逻辑与),&&比||高个优先级。
统计数字0~9的个数
int c;
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c' - 0'];
外部变量可以在全局范围内访问,因此函数间可以通过外部变量交换数据,而不必使用参数。
再者,外部变量在程序执行期间一直存在,而不是在函数调用时产生、在函数执行完毕时消失。 即使在对外部变量赋值的函数返回后,这些变量仍将保持原来的值不变。
类型限定符signed与unsigned可用于限定char类型或任何整型。不带限定符的char类型对象是否带符号则取决于具体机器,但可打印字符总是正值。
long类型的常量以字母L结尾,如123456789L、1234.3456L。 无符号常量以字母u或者U结尾。后缀f或F表示float类型,没有后缀的浮点数常量为double类型。
如果一个整数太大以至于无法用int类型表示,也将被当作long类型处理。
标准头文件<string.h>中声明了strlen和其它的字符串函数。 在不显示初始化时,自动变量、寄存器变量的值为未定义值(即无效值),外部变量和静态变量自动初始化为0。
<ctype.h> 定义了一组与字符集无关的测试和转换函数。例如:tolower(c) 函数将c转换为小写形式(如果c代写形式的话。
对于数组而言,const限定符指定数组所有元素的值都不能被修改;
const限定符也可以配合数组参数使用,它表明函数不能取决于数组元素的值:
如果试图修改const限定符的值,其结果取决于具体的实现
int strlen(const cahr[]) ;
为了保证程序的可移植性,如果要在char类型的变量中存储非字符数据,最好指定 signed 或 unsigned 限定符。
关于数据类型的转换:
char 与 short 类型的操作数转换为 int 类型,float类型的操作数不会自动转换为 double 类型
可以把一个较长的宏定义分成若干行,只需要在待续的行末尾加上一个反斜杠符\ 。