- 以下描述正确的是
A. 虚函数是可以内联的,可以减少函数调用的开销,提高效率
B. 类里面可以同时存在函数名和参数都一样的虚函数和静态函数
C. 父类的析构函数是非虚的,但是子类的析构函数是虚的,delete子类对象指针会调用父类的析构函数 - 以下描述正确的是:
A. while循环语句的循环体至少执行1次;
B. do-while循环可以写成while循环的格式;
C. continue语句可以出现在各种循环体中;
D. break语句不可以出现在循环体中。
解析:
对于A选项来说,如果while后面的条件从第一次就不符合,那就一次也不执行;
对于C选项来说,continue只能出现在for/while/do-while循环内部,或嵌套在此类循环里的语句和块内部,不能在单独的switch中用continue。
对于D来说,明显错误。
- 使用
char* p = new char[100]
申请一段内存,然后使用delete p释放,有什么问题( )
答案:不会有内存泄漏,但不建议使用。
解析:
当用delete来释放用new int[]申请的内存空间时,由于其为基本数据类型没有析构函数,所以使用delete与delete []相同,两者都会释放申请的内存空间,若是自定义的数据类型,有析构函数时,用new []申请的空间,必须要用delete []来释放,因为要delete []时会逐一调用对象数组的析构函数,然后释放空间。
- 在C语言中,关于静态变量的说法,正确的是
A. 静态变量和常量的作用相同
B. 函数中的静态变量,在函数退出后不被释放
C. 静态变量只可以赋值一次,赋值后则不能改变
D. 静态全局变量的作用域为一个程序的所有源文件
解析:全局变量作用域为当前文件,从定义/声明位置到文件结尾。动态全局变量可以通过extern关键字在外部文件中使用,但静态全局变量不可以在外部文件中使用。静态全局变量相当于限制了动态全局变量的作用域。
- 设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列(双向循环链表)存储方式最节省运算时间。
解析
在链表的末尾插入和删除一个节点时,需要修改其相邻节点的指针域。而寻找尾结点以及尾结点的前驱结点,只有带头结点的双循环链表所需要的时间最少。主要是寻找耗时。 - 执行以下代码执行后,变量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个字节。
- 下面代码会输出: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。