之前好长一段时间都在学习cocos2d-x引擎的使用,发现里面好多地方用到了C++11,现在打算深入学习一下这方面的知识,顺便在牛客网上面多刷点c/c++方面的题,算做一次复习吧!
1.全局变量可不可以定义在可被多个.C文件包含的头文件中?
A 可以
B 不可以
<span style="font-size:18px;">#include<stdio. h>
int fun(char *s)
{
char *p=s;
while(*p !='\0') p++;
return(p-s);
}
main()
{
printf("%d\n",fun("goodbye!"));
}</span>
程序的输出结果是?
解析:初始位置到结束位置,总共8个(带上最后的‘!号’)
- 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
- 引用通过某个引用变量指向一个对象后,对它所指向的变量间接操作。程序中使用引用,程序的可读性差;而指针本身就是目标变量的别名,对指针的操作就是对目标变量的操作。
- 指针比引用更节省存储空间
- 以上都不正确
解析:指针和引用的区别有很多,具体可以参考《C++Primer》,不过,指针实质上是按值传送的,即,传递一个指针的副本!
<span style="font-size:18px;">#include < stdio. h >
void f( int x)
{
if(x > = 10)
{
printf( "%d - ",x%10); f(x/10 );
}
else
printf( " % d" , x);
}
main()
{
int z = 123456;
f(z);
}</span>
则程序的输出结果是?
A 6-5-4-3-2-1-
B 6-5-4-3-2-1
C 1-2-3-4-5-6
D 1-2-3-4-5-6-
答案: B
解析:水题,考察函数的递归调用
5.下面有关虚函数的描述,说法错误的是?
A. 虚函数的作用是实现了继承性
B. 虚函数的作用就是实现“动态联编”,也就是在程序的运行阶段动态地选择合适的成员函数
C. 和类的静态成员函数与非类的成员函数相比,虚函数的效率较低
D. 要正确的实现虚函数,只能用一个基类的指针或者引用来指向派生类对象
答案:A
解析:虚函数的作用是实现了多态性。准确的说,是动态的多态性。那什么是静态的多态性呢?函数重载、运算符重载。。。
6.以下程序的输出结果为
<span style="font-size:18px;">#include "stdio.h"
int func(int x, int y)
{
return (x + y);
}
int main()
{
int a = 1, b = 2, c = 3, d = 4, e = 5;
printf(" % d\n", func((a + b, b + c, c + a), (d, e)));
return 0;
}</span>
A 15
B 5
C 9
D 出错
解析:水题,逗号运算符 表 最后一项
<span style="font-size:18px;">#include<stdio.h>
void add(int *p)
{
(*p)++;
printf("%d",*p);
if (*p>5)
{
return;
}
add(p);
}
int main()
{
int i=0;
add(&i);
return 0;
}</span>
- 12345
- 123456
- 111111
- 未知
解析:进入add()函数之后,直到输出6,才退出递归
- stack由编译器自动分配和释放,存放函数的参数值,局部变量,全局变量的值
- heap一般由程序员分配和释放,若程序员不释放,可能会造成操作系统的内存泄露
- stack由系统自动分配,无需程序员干涉,heap需要手动申请
- heap与stack都会在初始大小空间用满时,系统自动增加其大小
答案:B
解析:什么是heap?举个栗子,你用new和delete操作的就是堆!
9.以下涉及到内存管理的代码段中,有错误的是:
-
int *a=new int(12); //..... free(a);
-
int *ip=static_cast<int*>(malloc(sizeof(int))); *ip=10; //..... delete ip;
-
double *a=new double[1]; //.... delete a;
-
int *ip=new int(12); for(int i=0;i<12;++i){ ip[i]=i; } delete []ip;
答案:A B D
解析:new和delete对应,malloc和free对应,所以A B 错误。
至于D,int *ip=new int(12)指的是,声明一个整形指针,初始化其值为12,而如果是 int *ip=new int[12],指的是,声明一个包含12个元素的数组。
10.请问 func(0x11530828)的返回值是?
<span style="font-size:18px;"> int func(unsigned int i) {
unsigned int temp = i;
temp = (temp & 0x55555555) + ((temp & 0xaaaaaaaa) >> 1);
temp = (temp & 0x33333333) + ((temp & 0xcccccccc) >> 2);
temp = (temp & 0x0f0f0f0f) + ((temp & 0xf0f0f0f0) >> 4);
temp = (temp & 0x00ff00ff) + ((temp & 0xff00ff00) >> 8);
temp = (temp & 0x0000ffff) + ((temp & 0xffff0000) >> 16);
return temp;
}
请问 func(0x11530828)的返回值是:</span>
答案:9
解析:算了好一阵,结果还是错的。。。。