- 博客(15)
- 收藏
- 关注
原创 判断链表是否有环的思路,以及验证其正确性
在网上找了下判断单链表是否有环的文章,其中都是说取两个指针,一个指针p1指向头,另外一个指向头指针的下一个结点p2,然后通过循环,循环体中p1每次向下移动一步,p2向下移动两步,如果最终两个指针的值相等则判断有环。 这个算法很简单,但是其中转了一个弯,要稍微想下才知道为什么这样能判断单链表有环。 假如一个单链表有环,那么最终p2会先进环,p1后进,进了环之后,这个场景就像是围绕着操场跑步,两个
2014-02-12 14:00:37 749
原创 稀疏矩阵相乘
#pragma once class CMatrix { public: CMatrix(void); ~CMatrix(void); bool InitMatrix(int row=3, int col=2, int count_of_number=3); private: int m_nRow; int m_nCol; int m_nTotal; struct Node {
2013-12-03 22:26:21 982
原创 地址无关代码
什么是地址无关代码? 所谓地址无关代码指的是这个代码不管重定位到哪个地址,其代码执行都不会受到影响,代码也不会变。 下面就一步一步解释地址无关代码的来源 假如有个程序main.c int a; int main() { a=3; return 1; } 大家知道对于全局变量来说其地址是在编译完之后就应经确定了,那么a=3;这句代码转换为汇编代码就是 mov
2013-11-28 10:00:45 1154
原创 CSocket源码分析
CSocket中的Create函数调用Socket()函数,此函数创建套接字,并将套接字和一个窗口关联。然后调用bind绑定套接字。 CSocket中的Socket函数调用AttachHandle()中创建CSocketWnd对象并且创建该窗口,随后调用AsyncSelect()将CSocketWnd对象中的窗口和CSocket中的m_hsocket关联
2013-11-14 13:13:09 1186
原创 CArchive源码分析
CArchive的功能: 1.CArchive封装了文件的读写操作,使文件读写变的更简单,其内部重载了> 使读写文件如使用cin cout一样 2.CArchive提供了缓存机制,使文件操作更高效 3.CArchive不仅只是封装文件操作,他还能够结合CMemFile 和 CSocketFile(这些都是CFile的派生类),使对其操作也更简化 先看下对DWORD写操作代码: _AFX
2013-11-14 12:32:39 1114
原创 c++底层剖析(1)
首先从带有虚函数的基类派生讲起。 class Base { public: Base(){base = 1; cout<<"Base!\n";} virtual ~Base(){cout<<"~Base!\n";} virtual void say(){cout<<"hello Base\n";} int base; }; class Derive : public Base {
2013-10-19 15:56:03 622
原创 表达式求值 C++版
简单的实现了下表达式求值,不过没有进行输入表达式的检验,检验蛮复杂的,留待以后!!!1#pragma once #include using namespace std; #include #include class CExp { public: CExp(void); ~CExp(void); // 获得运算符的优先级 int GetPriority(char ch,boo
2013-10-14 13:24:13 879
原创 GDI+ 编译问题
当写一个gdi+的程序时,如果编译的过程中出现一大堆的错误,如: 1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusimaging.h(74) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\program files\microsoft sdks\w
2013-09-27 15:19:30 1038
原创 MDI 注意事项笔记
在框架窗口的窗口过程中处理wm_command消息时, 要加上default: 然后将消息传给子窗口,最后还要将消息继续传给DefFrameProc,如果不传给DefFrameProc的话当子窗口最大化后 在点击还原按钮将无法还原,另外当点击菜单上子窗口的窗口列表时将无法激活所选中的子窗口,考虑原因是对于菜单上的子窗口列表的相应是由DefFrameProc处理,当不传给他时将无法得到默认的处理
2013-08-24 08:30:14 967
原创 王艳萍的windows程序设计中的框架
程序代码: class CMyApp : public CWinApp { public: virtual BOOL InitInstance(); }; class CMainWindow : public CWnd { public: CMainWindow(); protected: char m_szText[1024]; //
2013-05-20 00:00:13 2097
原创 窗口,视口图解
SetWindowExtEx SetViewportExtEx 这两个函数是设置设备坐标和逻辑坐标的一个比例关系并且只能用在MM_ANISOTROPIC MM_ISOTROPIC这两种模式, 如: SetWindowExtEx(hdc, 2, 3, NULL); SetViewportExtEx(hdc, 1, 1, NULL); 假设映射模式是MM_ISOTROPIC,那么
2013-05-13 14:25:50 1025
原创 windows内核情景分析———系统调用分析
今天看了下windows内核情景分析中的系统调用这章,对于系统调用的一个大概过程有了一定的了解! 就拿书上的ReadFile这个API来说,首先这个API是在用户空间的,所以能够直接调用,然后在这个函数的内部会调用NtReadFile这个中介函数(这个在ntdll.dll中也是用户空间),当然内核中也有一个同名的函数,ntdll.dll中的这个NtReadFile函数
2013-05-12 22:54:26 800
原创 汇编代码出错,检查方法
汇编学习了一段时间,今天试着练习下,以前都没用汇编写过什么东西,今天就今天写代码遇到的问题总结下: 下面这些都是一些很低级的问题,都是针对刚开始写汇编代码的人(masm32) 1.关于汇编语法错误查错思路: 首先第一点,我用的是Radasm出错时出错位置不一定就是真正出错的地方,可能是前面或后面的语句 第二点,要注意定义的函数要放在代码段里,并且要放在end xxx之前,当出现链接错误,未
2013-04-22 17:15:36 2342
原创 堆栈操作之———神奇的代码
下面看一段神奇的代码,这段代码运行之后结果是: hello! haha! //主程序 #include using namespace std; unsigned int retAddr; void printhaha() { int a; *(int *)(&a+2) = retAddr; cout } void printhello() {
2013-04-08 22:21:07 648
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人