笔试题目搜集(5)
来源:互联网 发布:手机淘宝看注册时间 编辑:程序博客网 时间:2024/05/22 12:06
笔试题目搜集系列推荐:
(1)笔试题目搜集1
(2)笔试题目收集2
(3)笔试题目搜集3
(4)笔试题目搜集4
(5)笔试题目搜集5
1.下面printf执行的结果
- int main(void)
- {
- char a = 255;
- printf("%d\n",sizeof(++a));
- printf("%d\n",a);
- return 0;
- }
- int main(void)
- {
- char a = 255;
- printf("%x\n",a);
- return 0;
- }
int p = 1234printf("%2d\n",p)
结果:1234。不明真相
2.下列程序发生什么错误
#include <iostream>#include <cstdlib>#include <vector>using namespace std;class CDemo{public:CDemo():str(NULL){}~CDemo(){if(str) delete[]str;}char *str;};int main(){CDemo d1;d1.str = new char[32];strcpy(d1.str,"sjflsj");vector<CDemo>*a1 = new vector<CDemo>();a1->push_back(d1);//1delete a1;//2return 0;}
结果:重复delete同一片内存,程序崩溃。//1处的语句调用,vector的push_back(),此时会调用CDemo的复制构造函数,复制一个临时对象CDemo,插入vector。但是由于CDemo没有定义复制构造函数,由系统生成的构造函数为浅拷贝,这就导致生成的对象和d1指向了同一片内存。//2处的语句会释放str指向的内存空间,局部变量d1离开作用域也会释放str指向的空间,造成程序崩溃。
3.下面程序有什么问题
#include <iostream>#include <vector>using namespace std;void print(vector<int>ivec){vector<int>::iterator iter;for(iter=ivec.begin(); iter!=ivec.end();++iter){cout<<*iter<<" ";}}int main(){vector<int>ivec;ivec.push_back(1);ivec.push_back(6);ivec.push_back(6);ivec.push_back(5);vector<int>::iterator iter1,iter2;for(iter1=ivec.begin(); iter1!=ivec.end();){if(*iter1 == 6){iter2 = iter1;ivec.erase(iter2);--iter1;}++iter1;}print(ivec);system("pause");}
这是一个迭代器失效问题,只能删除第一个6以后的迭代器就失效了,不能删除后面的元素了。iter2=iter1,这句说明iter1和iter2是一样的,erase(iter2),这时指针已指向下一个元素6了,在iter1++,指向了元素3.
4.Windows下的内存是如何管理的?
Windows提供了3种方法来进行内存管理:虚拟内存,最适合用来管理大型对象或者结构数组;内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据;内存堆栈,最适合用来管理大量的小对象。
Windows操纵内存可以分两个层面:物理内存和虚拟内存。
其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G地址空间,而内存分配是通过堆进行的。对于每个进程都有自己的默认堆,当一个堆创建后,就通过虚拟内存操作保留了相应大小的地址块(不占有实际的内存,系统消耗很小)。当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(如果找不到,且堆创建属性是可扩充的,则扩充堆大小),为这个空闲块所包含的所有内存页提交物理对象(在物理内存上或硬盘的交换文件上),这时就可以访问这部分地址。提交时,系统将对所有进程的内存统一调配,如果物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留地址空间。
如果要知道某个地址是否被占用/可不可以访问,只要查询此地址的虚拟内存状态即可。如果是提交,则可以访问。如果仅仅保留,或没保留,则产生一个软件异常。此外,有些内存页可以设置各种属性。如果是只读,向内存写也会产生软件异常。
- class parent
- {
- public:
- virtual void output();
- };
- void parent::output()
- {
- printf("parent!");
- }
- class son : public parent
- {
- public:
- virtual void output();
- };
- void son::output()
- {
- printf("son!");
- }
son s;
::memset(&s , 0 , sizeof(s));
parent& p = s;
p.output();
执行结果是()
A、parent! B、son! C、son!parent! D、没有输出结果,程序运行出错
6、已知一段文本有1382个字符,使用了1382个字节进行存储,这段文本全部是由a、b、c、d、e这5个字符组成,a出现了354次,b出现了483次,c出现了227次,d出现了96次,e出现了232次,对这5个字符使用哈夫曼(Huffman)算法进行编码,则以下哪些说法正确()(迅雷笔试题目)
A、使用哈夫曼算法编码后,用编码值来存储这段文本将花费最少的存储空间
B、使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值是唯一确定的
C、使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值可以有多套,但每个字符编码的位(bit)数是确定的
D、b这个字符的哈夫曼编码值位数应该最短,d这个字符的哈夫曼编码值位数应该最长
7.i++与++i的区别
首先:++i效率高点。
原因是:++i 只是本身加1没有额外开辟空间,而i++需要建立额外对象。
前提:编译器没有做优化。
- 笔试题目搜集(5)
- 面试题目搜集(5)
- 面试题目搜集(3)
- 面试题目搜集(6)
- 题目搜集
- 网易笔试002(网上搜集到的笔试题)
- 笔试题目5
- 笔试面试题目5
- 面试题目搜集贴
- 搜集的一些题目
- 面试题目搜集
- PHP面试题目搜集
- 前端面试题目搜集
- PHP面试题目搜集
- 常见的php笔试题(附答案)搜集整理
- C语言笔试面试总结(网上搜集)
- 常见的php笔试题(附答案)搜集整理
- IBM实习生笔试题目(5)
- 黑马程序员_20 代理
- Reporting Service 和 SQL Server Integration Services 服务不能启动
- WordPress无法在线安装主题、插件及快速发布无法上传图片的解决办法
- Poj 3061 Subsequence 队列区间求和
- Oracle Transport Tablespace
- 笔试题目搜集(5)
- SEO创业技巧-素老胡huxingyu
- 开张
- mybatis应用实例学习
- comparison between distinct pointer types 'QPushButton*' and 'QAbstractButton*' lacks a cast
- iOS开发:什么是Bonjour
- HDU 3549 Flow Problem (网络流入门+模板详解)
- spring hibernate transaction
- iOS知识学习】_UITableView简介