C++面试常见问答题看这三篇文章就够了(下)
目录
前言
《C++面试常见问答题看这三篇文章就够了》的上篇和中篇主要是理论知识的问答,下篇的重点则是代码相关的问答题类型。
《C++面试常见问答题看这三篇文章就够了(下)》(本文)
正文
1. 代码int i=3;i<<=4;i的值等于多少?
答案:110000(二进制)、48。
2. 以下程序
-
main()
-
{
-
int m=12,n=34;
-
printf("%d%d",m++,++n);
-
printf("%d%d\n",n++,++m);
-
}
程序运行后的输出结果是()
答案:12353514。
3. 在gcc环境下,已知数组int arr[5]={1,2,3,4,5};则*(*(&arr+1)-1)的结果是什么?
答案:5,分析:& 是取地址符, &arr 代表整个数组,它的步长是整个数组所占的字节数, &arr 的类型是 int (*)[5] ,所以 &arr+1 指向数组 arr 最后一个元素的下一个地址, *(&arr+1)-1 则是指向 arr 最后的元素,所以 *(*(&arr+1)-1) 的值是 5 。
4. 若有说明:int i, j=2,*p=&i;,则能完成 i=j 赋值功能的语句是()。
答案:*p = *&j; 或者 *p = j; 或者 i=j;
5. 程序段的执行结果是:
-
#include <iostream>
-
using namespace std;
-
-
void fun1(int &x) {
-
x++;
-
}
-
-
void fun2(int x) {
-
x++;
-
}
-
-
int main() {
-
int abc = 13;
-
fun1(abc);
-
printf("%d\n", abc);
-
fun2(abc);
-
printf("%d\n", abc);
-
}
答案:14,14
6. 以下程序
-
main() {
-
char
-
str[][10]={"China","Beijing"},*p=str;
-
printf("%s\n",p+10);
-
}
输出结果?
答案:Beijing。
7. 下面程序的输出结果是( )
-
#include <stdio.h>
-
int main()
-
{
-
int intArray[] = {1, 2, 3, 4, 5};
-
int *p = (int *)(&intArray+1);
-
printf("%d,%d",*(intArray+1),*(p-1));
-
return 0;
-
}
答案:2,5。
8. 在64位系统中,有如下类:
-
class C
-
{
-
public:
-
char a;
-
static char b;
-
void *p;
-
static int *c;
-
virtual void func1();
-
virtual void func2();
-
};
-
那么sizeof(C)的数值是()
答案:24 。分析:sizeof(类)计算的是类中存在栈中的变量的大小,而类中的b和*c都是static静态变量,存在全局区中,因此不在计算范围之内,于是只剩下char a,void *p和两个virtual虚函数,a是char类型,占用一个字节,p是指针,在64位系统的指针占用8个字节,而两个虚函数只需要一个虚函数表指针,也是八个字节,加上类中的对齐方式(char a对齐时后面补上7个字节),故答案为24。
9. What is sizeof(desc_t)?
-
For a CPU with 32-bit addresses and 32-bit integers, we have the following code:
-
-
typedef struct data_ {
-
int a[10];
-
} data_t;
-
-
typedef struct descriptor_ {
-
data_t *ptr;
-
char data[0];
-
} desc_t;
答案:4。
10. 在64位操作系统上,下面程序返回什么结果:
-
int main() {
-
int *k[10][30];
-
printf(""%d\n"", sizeof(k));
-
return 0;
-
}
答案:2400。int *k[10][30] 声明了int型的指针数组 即数组里放的是int型的指针,8*10*30=2400,注意64位操作系统,指针占8字节;int (*k)[10][30] 这样声明的结果就是 8,这个是声明了数组指针。
11. 某32位系统下, C++程序如下所示,sizeof 的值应为?
-
char str[] = “http://www.renren.com” (长度为21)
-
char *p = str ;
计算
-
sizeof (str ) = ?(1)
-
sizeof ( p ) = ?(2)
-
void Foo ( char str[100]){
-
sizeof( str ) = ?(3)
-
}
-
void *p = malloc( 100 );
-
sizeof ( p ) = ?(4)
答案:22, 4, 4, 4。
12. 有如下代码,编译时有会什么结果?
-
struct A1{
-
virtual ~A1(){}
-
};
-
struct A2{
-
virtual ~A2(){}
-
};
-
struct B1 : A1, A2{};
-
int main()
-
{
-
B1 d;
-
A1* pb1 = &d;
-
A2* pb2 = dynamic_cast<A2*>(pb1); //L1
-
A2* pb22 = static_cast<A2*>(pb1); //L2
-
return 0;
-
}
答案:L1语句编译通过,L2语句编译失败。
13. 以下代码执行后,it 的数据为:
-
std::list<int> temp;
-
std::list<int>::iterator it = temp.begin();
-
it = --it;
答案:异常。
14. 请指出下列代表有几处错误。
-
#include<stdio.h>
-
class A
-
{
-
public:
-
virtual void f(){}
-
public :
-
A()
-
{
-
f();
-
}
-
};
-
class B1:public A()
-
{
-
private:
-
char *_s;
-
public:
-
B1()
-
{
-
_s=new char[1024];
-
}
-
private:
-
void f()
-
{
-
delete _s[];
-
_s=NULL;
-
}
-
}
-
class B2:public A
-
{
-
private:
-
int * _m;
-
public:
-
B2()
-
{
-
_m=new int(2016);
-
}
-
private:
-
virtual void f()
-
{
-
delete _m;
-
_m=NULL;
-
}
-
}
-
int main()
-
{
-
A*a1=new B();
-
A*a2=new C;
-
delete a1;
-
delete a2;
-
return 0;
-
}
答案:6处,修改后如下所示:
line12 classB1:publicA
line24 delete[] _s;
line27 };
line43 };
line46 A*a1 = new B1();
line47 A*a2 = new B2;
15. 有以下程序,程序运行的结果是DDDDD,横线处可以怎么写?
-
#include <iostream>
-
using namespace std;
-
class D{
-
int d;
-
public:
-
D(int x=1):d(x){}
-
~D(){cout<<"D";}};
-
int main(){
-
D d[]={_____________};
-
D* p=new D[2];
-
delete[]p;
-
return 0;
-
}
答案:
3,3,3 (分析:发生了隐式类型转换,从侧面说明了C++不是类型安全的语言)
或者
D(3), D(3), D(3) (分析:这个是最好理解的)
文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。
原文链接:liuzhen.blog.csdn.net/article/details/111464581
- 点赞
- 收藏
- 关注作者
评论(0)