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.
本文解析了四个C++代码片段的输出结果,包括指针操作、类成员初始化顺序、数组大小获取及八进制数值转换等内容。
743

被折叠的 条评论
为什么被折叠?



