11 2012 档案
摘要:Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。谨记:声明可以多次,定义只能一次。函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的。但是引用的时候一样是需要声明的。而全局变量在外部使用声明时(注意只有全局变量才能在外部使用),extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为0。而局部变量的声明不能有extern的修饰,且局部变量在运行时才在堆栈部分分配内存。全局变量或函数本质上讲没有区别,函数名是指向函数二进制块开
阅读全文
摘要:结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。1. 自引用结构体1.1 不使用typedef时错误的方式:struct tag_1{ struct tag_1 A; int value;};这种声明是错误的,因为这种声明实际上是一个无限循环,成员A是一个结构体,A的内部还会有成员是结构体,依次下去,无线循环。在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。正确的方式:(使用指针)struct ...
阅读全文
摘要:问题一:下面声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。 这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语
阅读全文
摘要:1、Windows API现在windows.h头文件中申明。其函数的实现,由操作系统提供的。 Win32 Console Application只能运行命令行程序 入口点: 一个是main Win32 Application是基于消息响应机制的,可以运行图形化的C++程序 入口点: 一个是Winmain Win 32程序编写步骤: (1)、WinMain函数的定义 (2)、创建一个窗口 (3)、进行消息的循环 (4)、编写窗口过程函数2、Windows程序中,有各种各样的资源(窗口、图标、光标),系统在创建这些资源的时候会为他们分配内存,并返回标识这些资源的标识...
阅读全文
摘要:1、sleep()和wait() wait()放弃对象锁,只有对此对象发出notify()方法,才能使其进入线程池。2、final、fially、finalize的区别3、&:是位操作符。 &&:是逻辑操作符4、多态性:允许不同的类的对象对同一消息作出响应。包括参数多态性和包含多态性。5、int是原始数据类型,Integer是引用类型,Java为int提供的封装类型。6、同步:数据在线程间共享,进行同步存取。例如:正在写的数据有可能被另一个线程读取。 异步:应用程序在对象上调用了一个花很长时间来执行的方法,且不希望让程序等待该方法返回。7、堆(heap)和栈(stack
阅读全文
摘要:#include<stdio.h>#define NUM 6int main(){ void print_msg(char*); print_msg("hello,"); print_msg("world!");}void print_msg(char* m){ int i; for(i=0;i<NUM;i++) { printf("%s",m); fflush(stdout); sleep(1); }}下图反映了程序的执行流程:执行结果:hello,hello,hello,hello,hello,hello,wor
阅读全文
摘要:typedef unsigned int UINT typedef UINT WPARAM typedef LONG LPARAM typedef LONG LRESULT 到了Win32API中,原来的16位变量也被扩展为32位,因此此时wParam和lParam的大小完全相同。WPARAM常常代表一些控件的ID或者高位底位组合起来分别表示鼠标的位置,如果消息的发送者需要将某种结构的指针或者是某种类型的句柄时,习惯上用LPARAM来传递。 理论上在使用自定义消息时,WPARAM、LPARAM的含义可以程序员任意指定的,但是最好遵从MFC中的习惯。在调用SendMessage()...
阅读全文
摘要:1. 对于类的成员变量,不管程序有没有显式的进行初始化,Java虚拟机都会先自动给它初始化为默认值。默认值如下: Boolean false Char '\u0000'(null) byte (byte)0 short (short)0 int 0 long 0L float 0.0f double 0.0d2. 局部变量声明之后,Java虚拟机就不会自动给它初始化为默认值,因此局部变量的使用必须先经过显式的初始化。 但是需要声明的是:对于只负责接收一个表达式的值的局部变量可以不初始化,参与运算和直接输出等其它情况的局部变量需要初始化。通过下面这个测试可以看到JVM对哪些数据初
阅读全文
摘要:Windows程序中,有各种各样的资源(窗口、图标、光标),系统在创建这些资源的时候会为他们分配内存,并返回标识这些资源的标识号,即句柄HANDLE(ID)。图标句柄(HICON)、光标句柄(HCURSOR)、画刷句柄(HBRUSH)。 为什么有个窗口对象还要窗口句柄呢?还有什么线程句柄,甚至还有控件ID和进程ID呢?MFC中的对象,比如应用程序对象,视图对象等,是对象就会占用内存空间,我们就可以用指针指向此对象进行访问,但windows还提供了句柄访问,初看好像有点多余,实则不然。如果我们一个进程想访问另一个进程,根据对象指针访问就不行了。我们现在的Windows是一个完全保护的系统,...
阅读全文