7.30

来源:互联网 发布:天地知我心儿的小说 编辑:程序博客网 时间:2024/06/07 12:15
1.int *p1 = new int[10];    // 10个未初始化intint *p2 = new int[10]();  // 10个值初始化为0的int解析:    在《C和指针》这本书里有介绍,int *p1=new int[10];该语句给指针p1分配内存,没有对指针初始化, int *p2=new int[10]();该语句给指针p2分配内存,并初始化指针2.分解质因数void prim(int m, int n) {     if (m >= n)     {         while (    1    ) n++;         (   2   );         prim(m, n);         cout << n << endl;     } }解析:分解质因数是将一个数差分成为几个质数相乘。n从2开始 第一处为m%n,代表取余。当余数是0的时候表示除尽,跳出while循环,即找出一个质因数。此时一个质因数即为n 然后 m/=n 即让m除去这个质因数,然后再进入求新m质因数的递归。 答案:m%n m/=n3.enum string{        x1,        x2,        x3=10,        x4,        x5,    } x;函数外部访问x等于什么? 解析:如果是函数外定义那么是0 如果是函数内定义,那么是随机值,因为没有初始化 在全局域定义enum,输出x是0,但是在局部域定义enum,输出x是随机数答案:04.unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000;请问:p1+5= 什么?p2+5= 什么?解析:    指针+n = 指针 + n*sizeof(类型);p1+5=p1+5*sizeof(unsigned char)=p1+5*1=0x801000+ 5=转换成16进制=0x801005  p2+5=p2+5*sizeof(unsigned long)=p1+5*4=0x810000+20=转换成16进制=0x810014  5.设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为? C c;void main(){    A*pa=new A();    B b;    static D d;    delete pa;}答:对类A,  是建立在堆上的对象指针pa, 手动释放 对类B, 是建立在栈上的对象b,main函数结束就释放 对类C ,在静态存储区创建了一个对象c ,程序结束时候释放 对类D,也是在静态存储区建立对象d,但是局部变量,程序结束时候释放. 析构函数调用顺序:  先调用A的析构,因为delete pa .  A 再释放栈上的对象b,             B 关键看CD的顺序. c是全局对象,对它的初始化是在main函数之前,所以析构时候要放在最后. 也就是先析构d ,然后再析构c 
原创粉丝点击