题(一):
单链表的每个结点中包括一个指针link,它指向该结点的后继结点。现要将指针q指向的新结点插入到指针P指向的单链表结点之后,下面的操作系列哪个正确:
A  q = p -> link; p -> link= q -> link;
B  p = p -> link = q -> link; p -> link;
C  q -> link = p -> link; p-> link = q;
D  p -> link = 1; q -> link = p -> link;

学习链表类知识点要学会画图:

C++面试题(二)

 题目(二)
i最后的值为多少?

1
int i = 1;
2
int j = i ++;
3
if((i > j++) && (i++ = j))
4
i += j;
A 3 , B 5, C 6, D 7
答案B

解析:
第一步:  i =1;  j = i++; 之后 i = 2; j = 1;
第二步: (i > j++), 2 > 1成立,之后  j++后等于 2; && 之后(i ++ = j),此时 i = 2; j = 2; 之后执行 i++; i = 3。所以&& 之后的也成立。
第三步:  i + =j;所以,i = 2+3=5。选择B。

题目(三)
求解下面程序输出;
1
class A {
2
    public:
3
      A(){ p();};
4
      virtual void p() {print("A")};
5
      virtual ~A(){p()};
6
};
7
class B : public A{
8
    public:
9
      B(){p();};
10
      void p(){print("B")};
11
      ~B(){p();};
12
}
13
14
int main( int ,char **){
15
      A * a= new B();
16
      delete a;
17
}
解析:
题目想构造一个B类的对象,B继承自A,所以首先构造A,A中构造函数调用P,虽然P是虚函数,按理说应该动态绑定(涉及多态复习一下),但是此时B并没有被构造,所以只能调用自己的P函数(输出A),接下来构造B,调用B的P函数(输出B),接着析构从派生类到基类。首先析构B,调用B的P函数(输出B),接着调用A的析构函数,按理说应该动态绑定,但是B已经被析构了,所以只能调用自己的P函数。

题目(四):
只能使用成员函数重载的运算符有:=,(),[],->,new ,delete。
字符串有结束符“\0”,数组没有结束符。

题目(五):

假定指针变量P定义为“int *p = new int(100);”
要释放p所指向的动态内存,应使用语句()
A delete   ,B delete *p   ,C delete &p   ,D delete []P

选择 A

解析:
int *p = new int (100);是创建一个int 型的内存,并赋值为100。
int *p = new int[100];是创建100个int 型的内存;
一般方法是new 一个数组的话一般是delete[],其他的直接delete即可。
但其实对于内置数据类型,其实delete[]和delete都可以。 


题目(六):
char str = "s\065AB";
printf("\n%d", sizef(str));
输出多少?

解析:
这道题考的真细,转义字符\ddd表示8进制 ,是一个数,所以就有4个字符 + ‘\0’ =5










相关文章:

  • 2021-07-07
  • 2018-08-07
  • 2022-12-23
  • 2021-06-01
  • 2021-06-08
  • 2021-09-19
  • 2021-10-14
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-22
  • 2021-11-14
  • 2021-05-29
  • 2022-03-05
相关资源
相似解决方案