C Primer Plus(第6版)第十二章复习题答案
12.8复习题
-
哪些类别的变量可以成为它所在函数的局部变量?
答:(我的答案)具有块作用域的变量,还有函数头中的形式参数。
(标准答案)自动存储类别;寄存器存储类别;静态、无链接存储类别 -
哪些类别的变量可以在它所在的程序的运行期一直存在?
答:(我的答案)具有静态存储期的变量。
(标准答案)静态、无链接存储类别;静态、内部链接存储类别;静态、外部链接存储类别。 -
哪些类别的变量可以被多个文件使用?哪些类别的变量仅限于在一个文件中使用?
答:(我的答案)具有外部链接的文件作用域的变量可以被多个文件使用,具有内部链接的文件作用域变量仅限于在一个文件中使用。
(标准答案)静态、外部链接存储类别可以被多个文件使用;静态、内部链接存储类别。 -
块作用域变量具有什么链接属性?
答:块作用域变量具有无链接属性。 -
extern关键字有什么用途?
extern用来引用式声明(referencing declaration),告诉编译器该变量的定义在程序的别处,该声明不会引起分配存储空间。
对于函数来说,extern 关键字声明定义在其他文件中,使用extern让编译器在别处查找函数的定义式声明, 且除非使用static关键字,否则一般函数声明都默认为extern。 -
考虑下面两行代码,就输出的结果而言有何异同:
同:两者都申请分配100个存储空间
int * p1 = (int *)malloc(100 * sizeof(int));
输出的是分配地址中的垃圾值(每个值竟然一样?)
int *p1 = (int *)calloc(100, sizeof(int));
异:calloc将数组中的每个元素都设置为0 -
下面的变量对哪些函数可见?程序是否有误?
/* file 1 */
int daisy; //外部链接,文件作用域,静态变量, 自动初始化为0,对petal,stem,root可见
int main(void)
{
int lily; //自动存储期,只对main可见
...;
}
int petal()
{
extern int daisy, lily; //这里有错lily不能被extern修饰
...;
}
/* file 2 */
extern int daisy; //定义在其它文件中的全局变量(文件作用域变量)
static int lily; //内部链接的文件作用域变量()只对file2可见
int rose;//全局变量,对root可见,如果在mian中加入 extern int rose即可在main使用rose
int stem()
{
int rose; //自动存储期,块作用域, 覆盖了外部的rose
...;
}
void root()
{
...;
}
- 下面的程序会打印什么?
#include <stdio.h>
char color= "B";
void first(void);
void second(void);
int main(void)
{
extern char color;
printf("color in main() is %c
", color); // B
first(); // R
printf("color in main() is %c
", color); // B
second(); //G second()中修改了全局变量color的值
printf("color in main() is %c
", color); //G
return 0;
}
void first(void)
{
char color;
color = "R";
printf("color in first() is %c
", color);
}
void second(void)
{
color = "G";
printf("color in second() is %c
", color);
}
程序运行结果如图:
- 假设文件的开始处有如下声明:
static int plink;
int value_ct(const int arr[], int value, int n);
a. 以上声明表明了程序员的什么意图
答:plink具有静态存储期,该文件包含的函数都可以使用这个变量;const修饰arr表明不希望value_ct使用arr修改原始数组的值
b. 用const int value 和 const int n 分别替换 int value 和 int n, 是否对主调函数的值加强保护。
答:不会,因为 value和 n已经是原始数据的备份,所以该函数无法更改主调函数中的相应的值。这些声明是防止在ret_val中修改value 和 n 的值。例如,如果用const修饰n,就不能使用n++
表达式。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。