读《The C Programming Language》(5)

来源:互联网 发布:windows辅助升级通道 编辑:程序博客网 时间:2024/04/29 19:10

第三章讲的是流程控制,对于经常使用类C语言的人来说,这章的内容应该是烂熟于胸。其中引起我注意的地方有下面几点:

  • 给你一个字符串,让你写一个小程序把它反转,大概很多人在应聘时都遇到过类似的小问题。作者在这里给出了他的实现,这段程序写得干净漂亮,让我忍不住把它贴在这里:
    #include <string.h>
    /* reverse: reverse string s in place */
    void reverse(char s[])
    {
        int c, i, j;
        for (i = 0, j = strlen(s)-1; i < j; i++, j--) {
            c = s[i];
            s[i] = s[j];
            s[j] = c;
        }
    }

    之后,作者为了说明逗号运算符的用法,又给出了一个更简洁的实现:
    for (i = 0, j = strlen(s)-1; i < j; i++, j--)
        c = s[i], s[i] = s[j], s[j] = c;

    用这段实现,整个函数体只有三行,而且逻辑清晰,可读性好。如果应聘时写出这样的代码,相信一定能给面试官留下好的印象。 
  • continue用在while和for循环中效果有所差别。用在while循环中,控制直接转到下一个迭代的条件判断;而用在for循环中,先要执行自增语句再转到下一次的条件判断。
  • 尽管作者建议尽量少使用goto语句,他还是给出了goto语句适用的场合。一个常见的例子是,要跳出嵌套很深的程序结构,如:
        for ( ... )
            for ( ... ) {
                ...
                if (disaster)
                    goto error;
            }
        ...
    error:
        /* clean up the mess */