2013 年海康威视校园招聘笔试题
1、10、10、4、4 四个数,怎么算出 24 点?
(10*10-4)/4=24
2、下列表达式在 32 位机器编译环境下的值()
[cpp] view plaincopyprint?
1. class
A
2. {
3. };
4.
5. class
B
6. {
7. public:
8.
9.
10. };
11.
B();
virtual
~B();
12. class
C
13. {
14. private:
15. #pragma
pack(4)
16.
17.
18.
19.
20.
21.
int
i;
short
float
j;
k;
char
l[64];
long
m;
char
*p;
22. #pragma
pack()
23. };
24.
25. class
D
26. {
27. private:
28. #pragma
pack(1)
29.
30.
31.
32.
33.
34.
int
i;
short
float
j;
k;
char
l[64];
long
m;
char
*p;
35. #pragma
pack()
36. };
37.
38. int
main(void)
39. {
40.
41.
42.
43.
44.
45. }
printf("%d\n",sizeof(A));
printf("%d\n",sizeof(B));
printf("%d\n",sizeof(C));
printf("%d\n",sizeof(D));
return
0;
A、1、4、84、82
B、4、4、82、84
C、4、4、84、82
D、1、4、
82、82
3、以下程序在 32 位机器下运行的结果是()
[cpp] view plaincopyprint?
1. #pragma
pack(4)
2. struct
info_t
3. {
4.
5.
6.
7.
8.
9.
10.
11.
12.
13. };
unsigned char
version;
unsigned char
padding;
unsigned char
extension;
unsigned char
count;
unsigned char
marker;
unsigned char
payload;
unsigned short
sequence;
unsigned int
timestamp;
unsigned int
ssrc;
14.
15. union
info_u
16. {
17.
18.
19.
20.
21.
22.
23.
24.
25.
unsigned char
version;
unsigned char
padding;
unsigned char
extension;
unsigned char
count;
unsigned char
marker;
unsigned char
payload;
unsigned short
sequence;
unsigned int
timestamp;
unsigned int
ssrc;
26. };
27. #pragma
pack()
28.
29. int
main(void)
30. {
31.
32.
33.
34. }
printf("%d\n",sizeof(info_t));
printf("%d\n",sizeof(info_u));
return
0;
A、12
12
B、12
4
C、16
4
D、16
12
E、16
1
4、以下表达式 result 的值是()
[cpp] view plaincopyprint?
1. #define
VAL1(a,b)
a*b
2. #define
VAL2(a,b)
a/b--
3. #define
VAL3(a,b)
++a%b
4.
5. int
6. int
7. int
8. int
9. int
10.
a
b
c
d
e
=
=
=
=
=
1;
2;
3;
3;
5;
11. int
result
=
VAL2(a,b)/VAL1(e,b)+VAL3(c,d);
A、-2
B、1
C、0
D、2
5、请写出以下程序的输出(5 分)
[cpp] view plaincopyprint?
1. void swap_1(int
a
,
int b)
2. {
3.
4.
5.
6.
7.
8. }
int
c;
c
a
b
=
=
=
a;
b;
c;
return
;
9. void swap_2(int
&a
,
int
&b)
10. {
11.
12.
13.
14.
15.
16. }
int
c;
c
a
b
=
=
=
a;
b;
c;
return
;
17. void swap_3(int
*a
,
int
*b)
18. {
19.
20.
21.
22.
23.
24. }
25.
int
c;
c
=
*a;
*a
*b
=
=
*b;
c;
return
;
26. int
main(void)
27. {
28.
29.
30.
int
int
a
b
=
=
100;
200;
swap_1(a ,
b);
31.
32.
33.
34.
35.
36.
37. }
printf("a
=
%d
,
b
=
%d\n",a
,
b);
swap_2(a ,
b);
printf("a
swap_3(&a
printf("a
=
,
=
return
0;
%d
,
b
=
%d\n",a
,
b);
&b);
%d
,
b
=
%d\n",a
,
b);
输出结果:
a = 100 , b = 200
a = 200 , b = 100
a = 100 , b = 200
6、下面的程序是否有问题,如有问题,请重构代码(5 分)
[cpp] view plaincopyprint?
1. void test_type(bool
b
,
const
char
*p
,
float
f)
2. {
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
if(!b)
{
}
return
;
else if(!p)
{
}
return
;
else if(!f)
{
}
return
;
15. }
修改如下:
[cpp] view plaincopyprint?
1. void test_type(bool
b
,
const
char
*p
,
float
f)
2. {
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15. }
if(!b)
{
}
return
;
else if(!p)
{
}
return
;
else if(f
>
-1e-10
&&
f
<
1e-10)
{
}
return
;
7、请指出以下程序有什么问题(5 分)
[cpp] view plaincopyprint?
1. void test_mem()
2. {
3.
4.
5.
6.
7. }
char
*p
=
new
char[64];
delete
p;
p
=
NULL;
return
;
应该修改为 delete[]p;
p 指向的是一个字符型的数组空间,原来的代码只是简单的释放
了指向申请空间的指针,并没有释放申请的空间,容易造成内存崩溃。
回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象
的内存空间的时候用 delete[]。
8、以下程序有什么问题,请指出。
[cpp] view plaincopyprint?
1. char*
GetMem()
2. {
3.
4.
char
p[] =
"hello";
return
p;
5. }
6.
7. void test_get_mem()
8. {
9.
10.
11.
12. }
char
*p
=
GetMem();
printf(p);
return
;
GetMem 函数中的 p 是一个在栈上的局部变量,当函数运行结束的时候,栈上的内容会自动
释放的,此处返回的值有可能会成为一个野指针,会出现一个意想不到的结果。
9、请写出 strcpy 和 memcpy 的区别(5 分)
答:strcpy 和 memcpy 都是标准 C 库函数,它们有下面的特点。
strcpy 提供了字符串的复制。即 strcpy 只用于字符串复制,并且它不仅复制字符串内容之
外,还会复制字符串的结束符。
strcpy 函数的原型是:char* strcpy(char* dest, const char* src);
memcpy 提供了一般内存的复制。即 memcpy 对于需要复制的内容没有限制,因此用途更广。
memcpy 函数的原型是:void *memcpy( void *dest, const void *src, size_t count );
strcpy 和 memcpy 主要有以下 3 方面的区别。
1、复制的内容不同。strcpy 只能复制字符串,而 memcpy 可以复制任意内容,例如字符数
组、整型、结构体、类等。
2、复制的方法不同。strcpy 不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,
所以容易溢出。memcpy 则是根据其第 3 个参数决定复制的长度。
3、用途不同。通常在复制字符串时用 strcpy,而需要复制其他类型数据时则一般用 memcpy。
10、请写出以下程序的输出结果
[cpp] view plaincopyprint?
1. class
Base
2. {
3. public:
4.
5.
6.
7.
8.
Base()
{
}
printf("I
am
Base()\n");
virtual
~Base()
9.
10.
11.
{
}
12. public:
printf("I
am
~Base()\n");
13.
14.
15.
16.
17.
18.
19.
20.
21. };
virtual
void
SayHello()
{
}
printf("Hello
Base\n");
void SayWorld()
{
}
printf("World
Base\n");
22. class
Derived
:
public
Base
23. {
24. public:
25.
26.
27.
28.
29.
30.
31.
32.
Derived()
{
}
printf("I
am
Derived()\n");
virtual
~Derived()
{
}
printf("I
am
~Derived()\n");
33. public:
34.
35.
36. };
37.
void SayHello();
void SayWorld();
38. void Derived::SayHello()
39. {
40.
41. }
printf("Hello
Derived\n");
42. void Derived::SayWorld()
43. {