作者 谢恩铭 转载请注明出处
公众号「程序员联盟」(微信号:ProgrammerLeague )
原文:http://www.jianshu.com/p/30d4754ea2b7

第二部分第十一课:练习题和习作


上一课和上上一课我们完成了一个游戏:

这些练习题是帮助大家巩固知识的,其实不难,特别对于有编程经验的人来说。

不看答案来完成这15道题目吧,都是单选题。

练习题


  • 1.什么是全局变量?

    A. 可以在随处被访问的变量
    B. 变量类型任意的变量
    C. 声明在main函数里的变量

  • 2.当我们引入标准库的头文件,使用类似如下的哪一种方式?

    A. #include <time.h>
    B. #include "time.h"
    C. #include {time.h}
    D. #include [time.h]

  • 3.C语言的编译按如下那种顺序进行?(这里其实还省略了一步:汇编(用到汇编器,就不赘述了))

    A. 预处理 -> 编译 -> 链接
    B. 编译 -> 链接 -> 预处理
    C. 链接 -> 预处理 -> 编译
    D. 预处理 -> 链接 -> 编译

  • 4.如果我写 &toto,我得到的是什么?

    A. toto的地址
    B. toto的值
    C. toto指向的变量的值

  • 5.我们用什么值来初始化指针?

    A. NOTHING
    B. 1
    C. NULL
    D. MAIN
    E. 0_ADDRESS

  • 6.有代码如下:

int number = 8;
int *pointer = &number;

假设number位于内存地址5000处,而pointer这个指针位于内存地址2500处,那么如果在接下来的程序中打印 *pointer 的值,是什么呢?

A. 5000
B. 2500
C. 8
D. 无可预知

  • 7.数组的下标从几开始?

    A. 0
    B. 1
    C. -1

  • 8.下面哪行代码是用于创建有10个double变量的数组?

    A. double *array[10];
    B. double array{10};
    C. double array[10];
    D. double array[9];

  • 9.以下程序有一个错误,是哪一个?

    int main(int argc, char *argv[])
    {
      char city[100];
      printf("请问您住在哪个城市 ? ");
      scanf("%s", &city);
      printf("您住在 %s, 这个城市我很熟悉 !", city);
      return 0;
    }
    

    A. 第二个printf中的city前少了&号
    B. 在city数组的定义中,city前少了*号
    C. 在scanf的city前多了&号

  • 10.哪一个预处理命令表明 #if的结束?

    A. #elif
    B. #endif
    C. #ifdef
    D. #ifndef

  • 11.结构体里面可以包含数组吗?

    A. 可以
    B. 不可以
    C. 可以,但仅当数组都是同一种类型时

  • 12.为什么通常我们更喜欢用一个函数来初始化结构体?

    A. 一旦结构体做了修改,我们不需要在程序中重做此结构体的所有初始化
    B. 对电脑来说,这样速度更快
    C. 这可以把我的代码变成C++形式的

  • 13.在打开一个文件后总是应该做什么事情?

    A. 关闭文件
    B. 测试文件指针的有效性
    C. 清空文件内容
    D. 把光标放在文件首位置

  • 14.如下代码有什么作用?

    malloc(sizeof(int) * 25);
    

    A. 在内存中申请一个25字节的int型变量
    B. 在内存中申请一个int型数组,数组包含25个元素
    C. 在内存中申请一个25字节的float型变量
    D. 在内存中申请一个float型数组,数组包含25个元素

  • 15.什么是缓冲区溢出?

    A. 存储的字符串超出了缓冲区的最大容量
    B. 在读缓冲区时进入了死循环
    C. 当我们丢失一个指向字符串的指针时造成的内存泄露

练习题答案


  1. A
  2. A
  3. A
  4. A
  5. C
  6. C
  7. A
  8. C
  9. C
  10. B
  11. A
  12. A
  13. B
  14. B
  15. A

习作


《用自己的语言解释指针》

总是小编说,可能有点唠叨。这回换听官们说说呗。

指针是C语言的精华,也是C语言之所以很灵活强大且具有陷阱的原因。

如果学习C语言,不理解指针,那就没掌握精髓。

所以在本次的“习作”中,我们要求大家用自己的语言(当然是中文啊,你不要给我用英语或其他语言... 哈哈)来解释指针,看看大家理解得如何。

如果记不太清楚了,请大家复习我们之前关于指针的那一课:《指针,C语言的王牌》。

将您的解释用留言的形式发在简书里即可。

不要一上来就长篇大论,先捋一捋一些指针的基本概念会更好。

我会回复的。

即使你不留言,也请自己多看看指针的知识点,可以阅读《C和指针》,《C专家编程》,《C语言深度解剖》等书。

第三部分第一课预告:


今天的课就到这里,一起加油吧。

下一次我们学习: 安装SDL


我是 谢恩铭,在巴黎奋斗的软件工程师。
我创建了程序员联盟的 知识星球,欢迎加入。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」