1. 以下描述正确的是
    A. 虚函数是可以内联的,可以减少函数调用的开销,提高效率
    B. 类里面可以同时存在函数名和参数都一样的虚函数和静态函数
    C. 父类的析构函数是非虚的,但是子类的析构函数是虚的,delete子类对象指针会调用父类的析构函数
  2. 以下描述正确的是:
    A. while循环语句的循环体至少执行1次;
    B. do-while循环可以写成while循环的格式;
    C. continue语句可以出现在各种循环体中;
    D. break语句不可以出现在循环体中。

解析:
对于A选项来说,如果while后面的条件从第一次就不符合,那就一次也不执行;
对于C选项来说,continue只能出现在for/while/do-while循环内部,或嵌套在此类循环里的语句和块内部,不能在单独的switch中用continue。
对于D来说,明显错误。

  1. 使用char* p = new char[100]申请一段内存,然后使用delete p释放,有什么问题( )

答案:不会有内存泄漏,但不建议使用。
解析
当用delete来释放用new int[]申请的内存空间时,由于其为基本数据类型没有析构函数,所以使用delete与delete []相同,两者都会释放申请的内存空间,若是自定义的数据类型,有析构函数时,用new []申请的空间,必须要用delete []来释放,因为要delete []时会逐一调用对象数组的析构函数,然后释放空间。

  1. 在C语言中,关于静态变量的说法,正确的是
    A. 静态变量和常量的作用相同
    B. 函数中的静态变量,在函数退出后不被释放
    C. 静态变量只可以赋值一次,赋值后则不能改变
    D. 静态全局变量的作用域为一个程序的所有源文件

解析:全局变量作用域为当前文件,从定义/声明位置到文件结尾。动态全局变量可以通过extern关键字在外部文件中使用,但静态全局变量不可以在外部文件中使用。静态全局变量相当于限制了动态全局变量的作用域。

  1. 设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列(双向循环链表)存储方式最节省运算时间。
    解析
    在链表的末尾插入和删除一个节点时,需要修改其相邻节点的指针域。而寻找尾结点以及尾结点的前驱结点,只有带头结点的双循环链表所需要的时间最少。主要是寻找耗时。
  2. 执行以下代码执行后,变量sz的值是多少16
typedef struct _tag_PARAM {int ia;char cb;char cc;int id;char ce;} Param;int sz = sizeof(Param);

解析:对vc的补齐还是不了解。对于这个题:
* ia长度是4;
* cb和cc的长度都是1,所以此时是2,但是要与前面补齐,所以实际字符分配了4个字节(后面两个字节没用);
* 然后id是4个字节;
* ce是1个字节,为了补齐,所以变成了4个字节。

总的来说是4*4=16个字节。

  1. 下面代码会输出:4
int a[4]={1,2,3,4};int *ptr=(int*)(&a+1);printf("%d",*(ptr-1));

解析:int *ptr=(int*)(&a+1);执行以后,ptr指向的是a数组整体的下一个地址,这里是一个随机地址;下面的ptr-1则是下一个随机地址-1,所以是a数组的末尾地址,所以值为最后一个数字4。