C程序设计语言(K&R)笔记

1.表达式中float类型的操作数不会自动转换为double类型。一般来说,数学函数(如math.h)使用双精度类型的变量。使用float类型主要是为了在使用较大数组时节省存储空间,有时也为了节省机器执行时间(双精度算数元算特别费时)。
2.scanf函数调用时,字符串类型不需要写‘&’,因为其本身即为地址。
3.EOF可能被定义为不同的值,使用EOF等标准符号可以增强程序的可移植性,常见值有-1。
4.根据某种特定的状态做不同的行为,可以用define定义状态量,然后定义int state。如:

#define IN 0
#define OUT 1


...
if(state == IN)
    ...
else   //OUT
    ...


5. ~(~0<<n)  得到最右边n位为1,其他位是0.
6.条件表达式
 每10行一个换行符:

for(i=0;i<n,i++)  
    printf("%6d%c",a[i],(i%10==9||i==n-1)? '
':' ');


是否复数的s

printf("You have %d item%s.
",n,n==1?"":"s");


7.在switch语句中,case的作用只是一个标号。
8.break只能跳出其所在的一级到上一级,而不是所有层次。
9.  getch和ungetch    超前读并放回一个字符

#define BUFSIZE 100


char buf[BUFSIZE];//for ungetch to buffer
int bufp=0;//the next spare index of buf


int getch(void)
{
    return (bufp>0) ? buf[--bufp] : getchar();
}


void ungetch(char c)
{
    if(bufp >= BUFSIZE-1)
        printf("ungetch: too many characters
");
    else
        buf[bufp++]=c;
}



10. 一个外部变量只能在某个文件中定义一次,而其他文件可以通过extern声明来访问他。外部变量的定义必须指定数组的长度,但extern声明则不一定要指定数组的长度。外部变量的初始化只能出现在其定义中。
11.在函数中,可以以程序块结构的形式定义变量,例如for语句的花括号。
12.在不进行显式初始化的情况下,外部变量和静态变量都将被初始化为0,而自动变量和寄存器变量的初值则没有定义。
对于外部变量和静态变量来说,初始化表达式必须是常量表达式,且只初始化一次(在概念上讲是在程序开始执行前进行初始化)。
对于自动变量和寄存器变量,则在每次进入函数或程序块时都将被初始化,可以不是常量表达式。

数组的初始化,如果初始化表达式的个数比数组元素少,则对外部变量、静态变量和自动变量来说,未被初始化的元素将被初始化为0。若初始化表达式的个数比数组元素多,则是错误的。

13.将一个数作为字符串打印

/*print decimal as string*/
void printd(int n)
{
    if(n<0){
        putchar('-');
        n=-n;
    }
    if(n/10)
        printd(n/10);
    putchar(n%10+'0');
}




原文地址:https://www.cnblogs.com/suncoolcat/p/3306324.html