阅读C++语言代码输出()

​​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++代码输出()

​​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位的机子上输出是什么:

​​#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.有以下程序

​​#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.