C Primer+Plus,十二复习题

1、哪一类存储类生成的变量对于包含他们的函数来说是局部变量?

答:自动存储类。

2、哪一存储类的变量在包含他们的程序运行时期内一直存在?

答:静态存储类。

3、哪一存储类的变量可以在多个文件中使用?哪一存储类变量只限于在一个文件中使用?

答:外部链接的静态存储变量、内部链接的静态存储变量。

4、代码块作用域变量具有哪种链接?

答:空链接。

5、关键字extern的用处?

答:一种是对外部文件中外部变量的引用声明;另外一种是对同文件中外部链接或内部链接静态变量的引用声明。

6、考虑如下代码段:

int *p1=(int *)malloc(100*sizeof(int));

考虑最终结果,下面语句有何不同?

int *p1=(int *)calloc(100,sizeof(int));

答:均可分配100块int类型大小的内存区,但calloc()函数可初始化0.

7、下列每个变量对哪些函数可见?程序有什么错误么?

//文件1
int daisy;   //对文件1和2中任何函数都可见;
int main(void)
{
    int lily; //对本文件中main()可见
    ...
}
int petal()
{
    extern int daisy,lily;   //此句lily定义有问题
    ...
}

//文件2
extern int daisy;
static int lily;         //对文件2可见;是内链接静态变量
int rose;              //对文件2可见;但是被本文件中stem屏蔽,同时也是外链接静态变量
int stem()
{
    int rose;          //对文件2中stem()函数可见
    ...
}
void root()
{...
}

8、下面程序会打印出什么?P350

答:B-R-B-G-G

9、文件开始处做如下声明:

static int plink;

int value_ct(const int arr[],int value,int n);

a、这些声明表明什么意图?

b、用const int value和const int n代替int value 和int n会增强对调用程序中值的保护么?

答:1、变量plink仅限于本文件作为全局变量使用;对于函数value_ct,ar[]数组的值受保护。

2、不会。被调函数不能改变实际参数的值。而对于第一个参数,因为传递的是数组指针,被调函数可能会改变地址内的值,从而间接改变调用函数中的实际参数地址中的值。