Lv.v

导航

2012年6月8日 #

给自己普及网络基本知识

摘要: IP地址,32位,4个字节.采用十进制的格式表示,每一个字节用"."来分隔字节.协议:为进行网络中的数据交换(通信)而建立的规则,标准或者约定.不同的层有不同协议.OSI七层参考模型.(理论上)应用层:远程登录协议Telnet,文件传输协议FTP,超文本传输协议HTTP,域名服务DNS,简单邮件传输协议SMTP,邮局协议POP3等等.....传输层:传输控制协议TCP.(可靠) 用户数据报协议UDP.(非可靠,实时性较高.)网络层:网际协议 IP, Internet互联网控制报文协议ICMP,Internet组织管理协议 IGMP.一台计算机发送给另一台计算机的数据.首先会 阅读全文

posted @ 2012-06-08 14:17 Lv.v 阅读(233) 评论(0) 推荐(0) 编辑

2012年6月7日 #

main函数外面不能赋值

摘要: 无聊的时候也会发现问题的.弄了一年,才发现 在main()外面不能赋值,刚开始,还以为是我编译器有问题.试了几次才知道,在main()外面确实 是不能赋值的. 以下是在网上搜到的理由.//-----------------------------------main函数之前是用来声明和定义全局变量和函数的,并由编译器进行预处理,给那些全局变量和定义的函数分配内存和地址,不能设计可执行代码。编译器在编译阶段对main函数之前的全局变量进行内存分配,对定义的函数生成可执行的代码,并保留该函数的地址以供main函数调用,而赋值语句操作是一句可执行代码,又没有类似函数指针的东西供main函数调用,所以 阅读全文

posted @ 2012-06-07 09:46 Lv.v 阅读(1969) 评论(0) 推荐(0) 编辑

2012年5月31日 #

存储细节

摘要: 在计算机系统中,数值一律用补码来表示(存储)。主要原因是使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。正数的补码与其原码一致;负数的补码:符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1。char类型默认情况下是有符号的,其表示的值的范围为[-128,127],超出这个范围的值会产生溢出.char a[1000];int i;for(i=0; i<1000; i++){a[i] = -1-i;}printf("%d",strlen(a)); 255柔性数组到底如 阅读全文

posted @ 2012-05-31 20:10 Lv.v 阅读(165) 评论(0) 推荐(0) 编辑

2012年5月29日 #

数组和指针的暧昧

摘要: 数组名不是对象,数组才是对象,指针也是一种对象,因此,数组名并没有内存空间,它是一个右值。想看具体的代码么?把下面的代码汇编一下,就可以看见其区别了:char a[10]; char *p; p=a; a[2]=10; p[2]=20; 编译器编译后的汇编代码是这样的: _main proc near push bp mov bp,sp sub sp,10 push si lea si,word ptr [bp-10] ;这个就是p=a,p被保存在某个地方,这里p被优化为保存在寄存器 mov byte ptr [bp-8],10 ;这个是a[2]=10,a是直接堆栈操作,因为它是一个地址,没有 阅读全文

posted @ 2012-05-29 08:57 Lv.v 阅读(256) 评论(0) 推荐(1) 编辑

2012年5月22日 #

字符指针常量和字符数组

摘要: 学了一年了,还是会在字符指针 指向 常量弄错..今天记下来,提醒自己..char* p=new char[7];p="ABCDEF"; //1,*(p+1)='L'; //2.delete p; //3.首先为 p 字符指针变量 分配内存大小为7;p指向了常量"ABCDEF",接着, *(p+1)='L'; 就错了,为什么了.因为 p 指向了常量, 常量是不可修改的(正常情况下). VirtualProtect();delete p; 接着也错了,为什么了.因为 p存放的是常量的指针,而不是刚开始 NEW 出来的指针... 阅读全文

posted @ 2012-05-22 10:07 Lv.v 阅读(600) 评论(0) 推荐(0) 编辑

2012年4月29日 #

给我个理由要用虚析构函数

摘要: 什么时候要用虚析构函数?通过基类的指针来删除派生类的对象时,基类的析构函数应该是虚的。否则其删除效果将无法实现。一般情况下,这样的删除只能够删除基类对象,而不能删除子类对象,形成了删除一半形象,从而千万内存泄漏。原因:在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员。如果想要用基类对非继承成员进行操作,则要把基类的这个操作(函数)定义为虚函数。那么,析构函数自然也应该如此:如果它想析构子类中的重新定义或新的成员及对象,当然也应该声明为虚的。注意:如果不需要基类对派生类及对象进行操作,则不能定义虚函数(包括虚析构函数),因为这样会增加内存开销。语法如下:class B 阅读全文

posted @ 2012-04-29 16:51 Lv.v 阅读(671) 评论(0) 推荐(0) 编辑

父类指针可以指向子类反之则不行(疑惑)

摘要: 例如:class a{public:int aa};class b:public a{public:int bb;}从内存的来看如a---------||占一个int数据大小--||----(aa数据)------||---------而b则是---------|---------|占一个int数据大小--|占一个Int数据大小--||从a中继承而来------|---(bb数据----------||------------------当定义一个基类类型的指针时a *p;这时,这个指针指向的是a类型的数据当p指针指向派生类的时候,因为p是a类型的指针,所以*p只解释为a类型数据的长度,即—— 阅读全文

posted @ 2012-04-29 09:50 Lv.v 阅读(2131) 评论(0) 推荐(0) 编辑

2012年4月28日 #

类型转换总结

摘要: C++里,对象类型转化问题是需要严加注意的一个问题,包括隐式转换,强制转化,旧式转化等种类,需要加以总结。本篇文章概括总结类型转化问题,并侧重于类型的隐式转换问题。关于强制转换的详细的内容放在下篇文章中总结。一。类型相关:如果两个类型可以相互转换,则称这两个类型相关。只用相关类型之间才可能发生隐式类型或显示类型转换。1.算术类型之间的转换:算术类型指不包括void的内置类型,算术类型之间可以相互转换。 转换规则根据不同的转换条件而不同2.算术类型和bool类型之间的转换:可将算术对象转换为bool类型,bool对象也可以转换为int型3.整型和枚举类型:自动将枚举类型的对象或者成员转换为整型4 阅读全文

posted @ 2012-04-28 17:30 Lv.v 阅读(509) 评论(0) 推荐(0) 编辑

对象的内存布局

摘要: 首先介绍一下C++中有继承关系的类对象内存的布局:在C++中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。 对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变量)。 之后是子类自己的成员变量数据。 对于子类的子类,也是同样的原理。但是无论继承了多少个子类,对象中始终只有一个虚函数表指针。 为了探讨C++类对象的内存布局,先来写几个类和函数 首先写一个基类: class Base{public:virtual void f() { cout << "Base::f&qu 阅读全文

posted @ 2012-04-28 15:15 Lv.v 阅读(727) 评论(0) 推荐(0) 编辑

2012年4月27日 #

DLL相关注意

摘要: Dynamic Library.h源码如下:#pragma once //extern "C" _declspec(dllexport) int _stdcall add(int a=10,int b=10); //利用关键字导出//extern __declspec(dllexport) int i;class _declspec(dllexport) DLLTest //利用关键字导出类{public: int a; DLLTest(); ~DLLTest();};Dynamic Library.cpp源码如下:#include <windows.h>#in 阅读全文

posted @ 2012-04-27 12:33 Lv.v 阅读(187) 评论(0) 推荐(0) 编辑