background image

指针基本问题:
面试例题

1:指针和引用的区别?

答案:

1)非空区别。在任何情况下都不能使用指向空值的引用。一个应用必须总是指向某些对象。因此如果你使用一

个变量并让他指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因
为这样你库赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以
把变量声明为引用。不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针要高。

2)合法性区别。在使用引用之前不需要测试它的合法性。相反,指针则应该总是呗测试,防止共为空。

3)可修改区别。指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则

总是指向在初始化时被指定的对象。以后不能改变。但是指定的对象其内容可以改变。

4)应用区别。总的来说,在以下情况下你应该使用指针:一是你考虑到存在不指向任何对象的可能(在这种情

况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的
指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指针,那么你应该使用引用。

面试例题

2:Please check out which of the following statements are wrong?(看下面的程序

哪里有错?

)

#include <iostream>
using namespace std;

int main()
{

  int iv;

//1

  int iv2=1024;

//2

  int iv3=999;

//3

  int &reiv;

//4

  int &reiv2=iv; //5
  int &reiv3=iv; //6

  int *pi;

//7

  *pi=5

//8

  pi=&iv3;

//9

  const double di;

//10

  const double maxWage=10.0;//11
  const double minWage=0.5;

  const double *pc=&maxWage;//12

  cout<<pi;
  return 0;

}
答案:
1 正确,很正常的声明了一个变量。
2 正确,很正常的声明了一个整形变量,同时初始化这个变量。

3 正确,理由同上。
4 错误,声明了一个引用,但引用不能为空,必须同时初始化。

5 正确,声明了一个引用 reiv2,同时初始化了,也就是 reiv2 是 iv 的别名。
6 正确,理由同上。

7 正确,声明了一个整数指针,但是并没有定义这个指针所指向的地址。
8 错误,整数指针 pi 并没有指向实际的地址。在这种情况下就给它赋值是错误的,因为赋得值不知道该放到哪里
去,从而造成错误。
9 正确,整数指针 pi 指向 iv3 实际的地址。

10 错误,const 常量赋值时,必须同时初始化。
11,正确,const 常量赋值并同时初始化。

12 正确,const 常量指针赋值并同时初始化。
面试例题

3:Which of the follow is NOT true about the "this pointer of class X?"(下面

关于

this”指针的叙述哪个是不正确的?)

A.It lets each object of class X to access its address(让 X 类的每一个对象指向他的地址。)

B.It can not be const X* in const member function of class X.(它是常量函数中的一个常量
指针。

)

C.It can not be used explicitly in member funtion of class X.(不能在类的成员函数里明确
地声明。

)