13-第12章复习题答案
A.12 第12章复习题答案
1.自动存储类别;寄存器存储类别;静态、无链接存储类别。
2.静态、无链接存储类别;静态、内部链接存储类别;静态、外部链接存储类别。
3.静态、外部链接存储类别可以被多个文件使用。静态、内部链接存储类别只能在一个文件中使用。
4.无链接。
5.关键字 extern 用于声明中,表明该变量或函数已定义在别处。
6.两者都分配了一个内含 100 个 int 类型值的数组。第 2 行代码使用 calloc() 把数组中的每个元素都设置为 0 。
7.默认情况下, daisy 只对 main() 可见,以 extern 声明的 daisy 才对 petal() 、 stem() 和 root() 可见。文件 2 中的 extern int daisy; 声明使得 daisy 对文件 2 中的所有函数都可见。第 1 个 lily 是 main() 的局部变量。 petal() 函数中引用的 lily 是错误的,因为两个文件中都没有外部链接的 lily 。虽然文件 2 中有一个静态的 lily ,但是它只对文件 2 可见。第 1 个外部 rose 对 root() 函数可见,但是 stem() 中的局部 rose 覆盖了外部的 rose 。
8.下面是程序的输出:
color in main() is B
color in first() is R
color in main() is B
color in second() is G
color in main() is G
first() 函数没有使用 color 变量,但是 second() 函数使用了。
9.a.声明告诉我们,程序将使用一个变量 plink ,该文件包含的函数都可以使用这个变量。 calu_ct() 函数的第 1 个参数是指向一个整数的指针,并假定它指向内含 n 个元素的数组。这里关键是要理解该程序不允许使用指针 arr 修改原始数组中的值。
b.不会。 value 和 n 已经是原始数据的备份,所以该函数无法更改主调函数中相应的值。这些声明的作用是防止函数修改 value 和 n 的值。例如,如果用 const 限定 n ,就不能使用 n++ 表达式。