问答题
问答题1:以下代码的实现有错误,下面哪句话的表述是正确的?
// 函数作用:将整型数组 p 中 n 个数据增大?
void increment_ints(int p[], int n){
assert(p != NULL);
assert(n >= 0);
while (n--){
*p++;
p++;
}
}
(A) *p++ 使得 p 在解引用之前增大,应该改为 (*p)++
(B) 数组的值是一个不能改变的值,所以p不能直接被修改。应该使用一个和p相关联的指针来完成这个操作
(C) while循环的条件必须是一个布尔类型的表达式,表达式应该为n!=0
(D) p不应该定义为变长的数组,参数中不应该包含参数n
提示a:*p++ 的优先级是,先计算++,然后再解引用,所以正确的方式应该是先解引用,再++
提示bcd:一般传入参数的都是地址,数组的名也就相当于首地址,p可以被修改,因为参数存储在栈区,while 循环条件不一定必须是布尔类型,数组的长度一般也都是通过另一个参数传入进来的,不然函数无法知道数组的长度,因为第一个只是一个指针而已.
答案:A
问答题2:如下函数的f(1)
的值为?
int f(int n) {
static int i = 1;
if (n >= 5) {
return n;
}
n = n + i;
i++;
return f(n);
}
提示:局部静态变量存储在静态区,只会被初始化一次,整个生命周期它都存在.
答案:7
问答题3:下列代码输出啥?
#include <iostream>
using namespace std;
class A{
public:
void print(){
cout << "A:print()";
}
};
class B: private A{
public:
void print