C++面试常见问答题看这三篇文章就够了(下)
发布日期:2021-06-30 21:12:44 浏览次数:3 分类:技术文章

本文共 3637 字,大约阅读时间需要 12 分钟。

目录

 


前言

《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 
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 
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
(pb1); //L1 A2* pb22 = static_cast
(pb1); //L2 return 0;}

答案:L1语句编译通过,L2语句编译失败。

13. 以下代码执行后,it 的数据为:

std::list
temp;std::list
::iterator it = temp.begin();it = --it;

答案:异常。

14. 请指出下列代表有几处错误。

#include
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 
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)  (分析:这个是最好理解的)

 

 

 

转载地址:https://liuzhen.blog.csdn.net/article/details/111464581 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:通过添加公钥实现ssh免密登录服务器(authorized_keys、sshd_config)
下一篇:如何优雅的监听MediaStream媒体流被释放了

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月11日 10时12分30秒