阅读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.