【面试题】 (D08 2101)
1、下面关于"指针"的描述不正确的是( A )
A 当使用free释放掉一个指针内容后,指针变量的值被置为NULL
B 32位系统下任何类型指针的长度都是4个字节
C 指针的数据类型声明的是指针实际指向内容的数据类型
D 野指针是指向未分配或者已经释放的内存地址
2、以下程序统计给定输入中每个大写字母的出现次数(不需要检查输入合法性),以下能补全程序,正确功能的选项是( D )
void AlphabetCounting(char a[],int n)
{
int count[26]={},i,kind=0;
for(i=0;i<n;++i)
(1)_____;
for(i=0;i<26;++i)
{
if(++kind>1) putchar(';');
printf("%c=%d",(2)_______);
}
}
A ++count[a[i]-‘Z’]; ‘Z’-i,count[‘Z’-i]
B ++count[‘A’-a[i]]; ‘A’+i,count[i]
C ++count[i]; i,count[i]
D ++count[‘Z’-a[i]]; ‘Z’-i,count[i]
E ++count[a[i]]; ‘A’+i,count[a[i]]
3、下列关于C/C++的宏定义,不正确的是(B)
A 宏定义不检查参数正确性,会有安全隐患
B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量
C 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
D 相对于函数调用,宏定义可以提高程序的运行效率
4、下面代码会输出( A )
int main()
{
int a[4]={1,2,3,4};
int *ptr=(int*)(&a+1);
printf("%d",*(ptr-1));
}
A 4
B 1
C 2
D 3
5、请找出下面程序中有哪些错误( C )
int main()
{
int i=10;
int j=1;
const int *p1; //(1)
int const *p2=&i; //(2)
p2=&j; //(3)
int *const p3=&i; //(4)
*p3=20; //(5)
*p2=30; //(6)
p3=&j; //(7)
return 0;
}
A 1,2,3,4,5,6,7
B 1,3,5,6
C 6,7
D 3,5
6、在公有派生的情况下,派生类中定义的成员函数只能访问原基类的( C )
A 公有成员和私有成员
B 私有成员和保护成员
C 公有成员和保护成员
D 私有成员,保护成员和公有成员
7、假定有类AB,有相应的构造函数定义,能正确执行AB a(4),b(5),c[3],*p[2]={&a,&b};
语句,请问执行完此语句后共调用该类的构造函数次数为( A )
A 5
B 4
C 3
D 9
8、关于函数的描述正确的是( D )
A 虚函数是一个static型的函数
B 派生类的虚函数与基类的虚函数具有不同的参数个数和类型
C 虚函数是一个非成员函数
D 基类中说明了虚函数后,派生类中起对应的函数可以不必说明为虚函数
9、有如下程序,执行后输出的结果是( D )
#include <iostream.h>
class cla
{
static int n;
public:
cla(){n++;}
~cla(){n--;}
static int get_n()
{
return n;
}
};
int cla::n= 0;
int main()
{
cla *p =new cla;
delete p;
cout<<"n="<<cla::get_n()<<endl;
return 0;
}
A n=3
B n=4
C n=1
D n=0
10、 以下程序输出结果是( C )
class A
{
public:
A ():m_iVal(0) {test();}
virtual void func() { std::cout<<m_iVal<<‘ ’;}
void test() {func();}
public:
int m_iVal;
};
class B : public A
{
public:
B(){test();}
virtual void func()
{
++m_iVal;
std::cout<<m_iVal<<‘ ’;
}
};
int main(int argc ,char* argv[])
{
A*p = new B;
p->test();
return 0;
}
A 1 0
B 0 1
C 0 1 2
D 2 1 0
E 不可预期
F 以上都不对