题(一):
单链表的每个结点中包括一个指针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;
学习链表类知识点要学会画图:
题目(二)
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