面试笔试刷题 C++ (持续更新)

1. 阅读C++语言代码输出()
1
2
3
4
5
6
7
8
int main()
{
     int arr[]={ 1 , 2 , 3 , 4 , 5 , 6 , 7 };
     int *p=arr;
     *(p++)+= 89 ;
     printf( "%d,%d\n" ,*p,*(++p));
     return 0 ;
}

A.3 3    B.2 2    C.2 3    D.3 2

正确答案: A

首先在第五行中,p指针的位置往后挪了一位,指向了arr[1]。在C++中,函数的参数是从右往左进栈的,之所以会有这种情况,是因为有不定参数个数的函数存在,而printf则是典型的不定参数个数的函数,在第六行的printf中,先进栈的是*(++p),所以此时p指向arr[2],而后入栈的*p参数时,依然指向的是这个位置,所以答案为3 3.

2.阅读c++代码输出()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class base1{
     private int a,b;
     public :
     base1 (  int i ) : b(i+ 1 ),a(b){}
     base1():b( 0 ),a(b){}
     int get_a(){ return a;}
     int get_b(){ return b;}
};
int main()
{
     base1 obj1( 11 );
     cout<<obj1.get_a()<<endl<<obj1.get_b()<<endl;
     return 0 ;
}

A.12 12    B.随机数 12    C.随机数 随机数    D.12 随机数

正确答案: B

此题跟上一题相似,因为函数的参数是从右至左进栈的,故第11行的构造函数中,先执行的a的赋值,由于此时b还未赋值,故其值为随机数,故选B。

3.以下代码在64位的机子上输出是什么:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int getSize( int data[]){
     return sizeof(data);
}
 
int main(){
     int data1[] = { 1 , 2 , 3 , 4 , 5 };
     int size1 = sizeof(data1);
     
     int * data2 = data1;
     int size2 = sizeof(data2);
     
     int size3 = getSize(data1);
     
     printf( "%d, %d, %d" , size1, size2, size3);
     return 0 ;
}

A.20 8 8    B.4 4 4    C.20 4 20    D.20 20 20

正确答案: A

首先第8行的size1的值为数组data1的大小,也就是5*4(int) = 20。第11行的size2求得的是指针data2的大小4。然后是第13行的size3,其值为getSize这个函数算出来的,而这个函数传过去的参数其实是一个指针,所以它的值也为4。

4.有以下程序

1
2
3
4
5
6
7
8
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
   int m=0123, n = 123;
   printf ( "%o %o\n" , m, n);
   return 0;
}
程序运行后的输出结果是()

A.0123 0173    B.0123 173    C.123 173    D.173 173

正确答案: C

第五行的初始化中,m的值为8进制的0123,故其在最后按8进制输出的时候值就为123,而n一开始为十进制的123,故最后的输出为173.


猜你喜欢

转载自blog.csdn.net/RaAlGhul/article/details/80832497