1.二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[4][4]的存储地址为Oxf8b82140,X[9][9]的存储地址为Oxf8b8221c,则X[7][7]的存储地址为()。
A.Oxf8b821c4 B.Oxf8b821a6 C.Oxf8b82198 D.Oxf8b821c0
解答:
X[4][4] 至X[9][4]所差地址为5行的长度; oxf8b8221c - oxf8b82140 = 0xDC ,十进制为220;
(220 - 5) / 5 = 43,即每行的长度为43;X[7][7]的地址为X[4][4] 加 3行地址长度 加 3;
3行地址长度 加 3为 43 * 3 + 3 = 132,转换为十六进制为ox84;因此,oxf8b82140 + ox84 = 0xf8b821c4;
2.求函数返回值,输入x=9999
A. %%B. ****C. 有语法错,不能正确执行D. %%%%
解答:因为单个%是作为格式符使用的,两个%,表示要输出的就是%.
4.
解答:
1.在类A的析构函数中,delete一个非A类对象通常是没有问题的;
在类A的析构函数中,delete一个类A的对象,就会造成死循环,堆栈溢出;
在析构函数外使用 delete后,应该立即给指针赋值 NULL防止野指针。
2.因为this是Myclass * const this指针,也就是说this指针指向的对象(不是指向的对象的值)不可以改变,所以给this赋值在编译期间就不会通过,
如果没有this = NULL这语句的话是栈溢出,因为会不停的调用析构函数。
3.this被const修饰不能修改。 删掉this=null后,在类的析构函数中调用delete this,delete this会去调用本对象的析构函数,而析构函数中又调用delete this,形成无限递归,造成堆栈溢出,系统崩溃。