
温故而知新
文章平均质量分 53
arbboter
也曾梦想上天,还是默默无闻,而今迈步从头越
展开
-
空指针调用成员函数
试分析一下代码的运行情况即输出:#include using namespace std;class A {public: int m; void print() { cout << "A\n"; } void B() { int sum = 0; for (int i=0; i<100; i++) { sum += i; }原创 2015-03-02 16:20:05 · 3271 阅读 · 0 评论 -
TCP和UDP 协议发送数据包的大小
概要描述在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的发送聊天消息的情况作分析,对于其他情况,或许也能得到一点帮助: 首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,传输层,应用层.UDP属于运输层,下面我们由下至上一步一步来看转载 2015-03-12 10:16:05 · 3236 阅读 · 0 评论 -
C\C++小知识汇总
类的大小空类(不含成员变量和虚函数):因为对象不可能不占内存,否则这个对象怎么存在,所以C++规定空类对象内存大小为1。 class EC{public: EC(){} ~EC(){}; void EC1() { printf("EC1\n"); }};class EVC{public: EVC(){} ~EVC(){}; void EVC1() { ...原创 2014-05-13 17:06:28 · 1939 阅读 · 0 评论 -
城市行--求网格中的可达路径数
今天遇到的一个题目,题目描述大概是这样的:有一个城市东西方向有四条平行且间距相同的道路,南北方向有六条平行且间距相同的街道,这几条道路横穿贯通整个城市,现有一个人从城市的最西南角想到城市的最东北角上去,且只往东或者往北方向走,求有多少种方案?当时画了下图,想到了用递归方法,不过因为时间问题没有深想,也想到了用穷举法,不过最后还是没有做出来。题中所述可转化为下图:也就原创 2015-03-07 21:59:43 · 4095 阅读 · 0 评论 -
程序的启动和退出过程详解
Windows支持两种类型的应用程序。一种是基于图形用户界面(GUI)的应用程序,另一种是基于控制台用户界面(CUI)的应用程序。 基于G U I 的应用程序有一个图形前端程序。它能创建窗口,拥有菜单,可以通过对话框与用户打交道,并可使用所有的标准“Wi n d o w s ”组 件。Wi n d o w s 配备的所有应用程序附件(如Notepad 、Calculator 和WordPad ),翻译 2015-03-06 11:09:44 · 4140 阅读 · 0 评论 -
排序-简单选择排序
思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止。例如:进行第i趟选择时,从当前候选记录中选出关键字最小的k号记录,并和第i个记录进行交换。基本实现代码for (int i=0; i<nLen-1; i++){ for(int j=i+1; j<nLen; j++) {原创 2014-07-13 09:33:55 · 1496 阅读 · 0 评论 -
构造函数的异常处理
试分析推断下述代码的输出结果:#include #include #include using namespace std;void* operator new(size_t size){ printf("my new -> %u\n", size); return malloc(size);}void operator delete(void *p){ printf("原创 2015-03-02 10:32:41 · 6083 阅读 · 0 评论 -
C\C++备忘录之关键字【static,const,extern】
static1.局部变量// 该变量生命周期不仅仅是进入该函数后,而是整个程序运行期间void foo(){ static int nVar = 0; printf("var = %d\n", ++nVar);}原创 2014-08-18 15:56:34 · 1391 阅读 · 0 评论 -
前置声明
前置声明的好处很多, 比如能避免头文件互相包含的冲突, 比如有时我们在一个头文件中只需要另一个头文件的某个类型定义, 只需要对它做一下前置声明即可,因为为了相对较小的目的要包含进来一个很大的头文件, 实在有些不值得, 况且这个头文件可能还要被其它很多文件再包含的, 这样代价就更大了.所以做前置声明即可, 在源文件真正需要的时候再包含那个头文件.原创 2014-05-07 11:47:06 · 1708 阅读 · 0 评论 -
排序-冒泡排序
思想冒泡排序基本思想是将n个记录看作按纵向排列,每趟排序时从下至上对每对相邻记录进行比较,若次序不符合要求就交换。每趟排序结束时都能使排序范围内关键字最大的记录象一个气泡一样升到表上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最大、次大、第三大…的各个记录置于表的第一个、第二个、第三个… 位置上。原创 2014-07-10 22:33:11 · 1229 阅读 · 0 评论 -
关于Windows内存结构
约定:讨论范围是默认的32位的windows NT系统原创 2014-08-09 14:26:48 · 1505 阅读 · 0 评论 -
快速排序
基本思想 快速排序的基本思想是基本思想是,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。快速排序使用分治法来把一个串(list)分为两个子串行(sub-lists)。注意分组的时候先从右边开始比较,因为之前记录的基数是开始的位置,所以循环之前开始部分是空的,因此从右边开始。分组时需原创 2014-12-20 17:42:34 · 1765 阅读 · 0 评论 -
希尔排序
概要 希尔(Shell)排序的主要思想是分组分别用插入排序实现排序,然后不断缩小分组时的相邻组内元素的距离达到排序效果,经过几步之后,整个序列基本有序,最后整体利用插入排序即可完成排序。这里为什么选择插入排序呢?因为排序过程中“基本有序”越来越好,所以采用插入排序最好。主要代码及示例#include #include #include void She原创 2014-12-20 20:49:13 · 1567 阅读 · 0 评论 -
强制类型转换Demo
#include #include #include using namespace std;class A{public: int a; A() { a = rand(); } virtual void printf() { cout << a << endl; }};class B: public A{public: int b; B(原创 2014-07-18 09:32:51 · 1153 阅读 · 0 评论 -
从源代码到输出
本文研究的是一个经典的hello.c程序从产生到执行输出的过程。源代码是:#include int main(){ printf("Hello, world.\n"); return 0;}程序编译执行过程程序源代码经编译器编译链接后生成了操作系统可直接执行的可执行文件,该文件存储按照约定好的格式存储计算机可识别的低级机器指令,指示计算机如何运行。程序运行时,首先由程序加载器把程序从原创 2015-02-27 12:30:38 · 3059 阅读 · 0 评论 -
memmove函数实现
背景memcpy是我们最常用的数据拷贝函数,一般使用不会有啥问题,但是当涉及到目标区域的数据和源数据有数据重叠的时候,可能就会产生我们意想不到的拷贝结果。究其原因,memcpy是通过从头至尾的顺序拷贝方式实现,所以如果拷贝一开始就导致源数据区的数据被破坏(修改),那么拷贝结果就并不是我们预想到的数据数据拷贝了。在什么样的情况下会导致memcpy失效呢?这就得追本溯源了,我们知道memcpy的实现方式原创 2016-09-23 16:51:59 · 1924 阅读 · 2 评论