博文

指针做形参(2010-06-07 20:18:00)

摘要:void test(int* p) { *p = 2; p = NULL; }int main(int argc, char * argv[]) { int te = 3; cout<<"te = "<<te<<endl; int *pTe = &te; cout<<"*pTe = "<<*pTe <<endl; cout<<"pTe = "<<pTe <<endl; test(pTe); cout<<"After test()\n*pTe = "<<*pTe <<endl; cout<<"pTe = "<<pTe <<endl; system("pause"); return 0; } 输出: te = 3 *pTe = 3 pTe = 0013FF38 After test() *pTe = 2 pTe = 0013FF38 Press any key to continue . . . 说明: 函数的形参可以是指针,此时将复制实参指针。与其他非引用类型的形参一样,该类形参的任何改变也仅作用于局部副本。如果函数将新指针赋给形参,主调函数使用的实参指针的值没有改变。 当函数调用的时候,传递给被调用函数一个指针变量p的复制,即原来地址的复制;如果在被调用函数中修改了被指向的对象,即指针所指向的地址处的内容时,由于调用函数中的被复制的指针依然指向这块地址,所以,造成了返回后原指针所指向的对象的值的改变。如果在被调用函数中对指针本身进行任何操作,其实都不会对调用函数中的指针造成任何的修改。......

阅读全文(2969) | 评论:0

全局变量、局部变量、静态全局变量、静态局部变量的区别(2010-05-26 13:03:00)

摘要:全局变量、局部变量、静态全局变量、静态局部变量的区别(转)C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。从分配内存空间看:全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间 全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。    1)、静态变量会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。  2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static ......

阅读全文(1693) | 评论:0

c++内存空间分配【转】(2010-05-26 13:02:00)

摘要: 一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放                                                                                                                                        &nbs......

阅读全文(2955) | 评论:0

线程ID 与 线程句柄 区别 (转载)(2010-05-22 14:26:00)

摘要:线程ID 与 线程句柄 区别 (转载) 以下几点是一些总结: ●CreateThread() API 用于创建线程。 API 返回同时线程句柄和线程标识符 (ID)。 线程句柄有完全访问权创建线程对象。 运行线程时线程 ID 唯一标识线程在系统级别。●ID是在Windows系统范围内唯一标示Thread的。   ●Handle是用来操作Thread的,可以有多个,每个HANDLE可以有不同的操作权限,在不同进程OpenThread得到的值不一样。   ●线程的ID是系统全局的,其HANDLE是进程局部的. ●此ID只在线程的生存期内有效。 ●HANDLE是os和client之间用来操作进程和线程一个桥梁,os有一张维护HANDLE的表单,里面大概放置了   HANDLE的引用计数和有关的属性,HANDLE是os标识进程和线程的东西,但是用户也可以用这个来标识进程和线程,对其操作;而ID是os用来标识进程和线程的,并且是全局唯一的,  但用户可以通过这个ID获得进程线程的HANDLE,多次得到的HANDLE并不一定是一样的.HANDLE是内核对象,而ID好像不是,并没有专门创建ID的函数. ●ID是CreateThread时操作系统自动生成的。 ●线程的句柄和id是不同的。     在windows系统中,线程的id是唯一对应的,也就是说,如果两个线程返回相同的id,则他们必然是同一线程,反之一定是不同的线程。而线程的句柄并不是线程的唯一标识,线程的句柄只是用来访问该线程的的一个32位值,尽管相同的句柄一定标识同一线程,但同一线程可能拥有两个打开的句柄,因此,不能用句柄来区分两个线程是否是同一线程。 ......

阅读全文(2199) | 评论:0

java中yield(),sleep()以及wait()的区别(2010-05-10 17:38:00)

摘要: 往往混淆了这三个函数的使用。 从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列)。并且在某一时刻cpu只为ready queue中位于队列头部的线程服务。但是当前正在被服务的线程可能觉得cpu的服务质量不够好,于是提前退出,这就是yield。或者当前正在被服务的线程需要睡一会,醒来后继续被服务,这就是sleep。 sleep方法不推荐使用,可用wait。线程退出最好自己实现,在运行状态中一直检验一个状态,如果这个状态为真,就一直运行,如果外界更改了这个状态变量,那么线程就停止运行。 sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。 当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。 waite()和notify()因为会对对象的“锁标志”进行操作,所以它们必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。   彻底明白多线程通信机制:   线程间的通信1.    线程的几种状态线程有四种状态,任何一个线程肯定处于这四种状态中的一种:1)    产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。2)    可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它;也可能它已正在执......

阅读全文(3819) | 评论:0

计算机核心期刊排名以及投稿方法(2010-04-21 10:18:00)

摘要:核心期刊: 可以先投计算机应用研究,因为可以免费审稿(3个月),在线,如要发表交1500元          http://www.arocmag.com/ch/index.aspx,          然后可以投给计算机工程(3个月到半年),200元审稿.保底非核心期刊: 计算机技术与发展(原微型计算机),无审稿费(1个月),发表850元.以下是转载的核心期刊排名: 自动化、计算机部分 1    计算机学报    北京    中国计算机学会等 2    软件学报    北京    中国科学院软件研究所 3    计算机研究与发展    北京    中国科学院计算技术研究所等 4    自动化学报    北京    中国科学院等 5    计算机科学    重庆    国家科技部西南信息中心 6    控制理论与应用    广州    中国科学院系统科学研究所等 7    计算机辅助设计与图形学学报    北京    中国计算机学会等 8    计算机工程与应用    北京    华北计算技术研究所 9    模式识别与人工智能    北京    中国自动化学会等 ......

阅读全文(3803) | 评论:0

在Windows下JAVA和ANT的环境变量设置(2010-03-24 15:18:00)

摘要:们来看一下以下设置WinXP及以上用户,右键点击我的电脑->属性->高级->环境变量,设置即可。设置完成后需重新启动命令提示符才能生效。具体如下: JAVA环境变量设置 Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。 JAVA_HOME指向的是JDK的安装路径,如D:\Program Files\IBM\Java50,在这路径下你应该能够找到bin、lib等目录。 设置方法:JAVA_HOME = D:\Program Files\IBM\JAVA50 PATH环境变量原来Windows里面就有,只要保留原来的PATH的内容,并在其中加上%JAVA_HOME%\bin (%JAVA_HOME%就是是引用上一步设定好的环境变量JAVA_HOME) 。 设置方法:PATH = %JAVA_HOME%\bin;%PATH% 同样,%PATH%是引用以前你设置的PATH环境变量,你照抄以前的值就行了。 注意的是最前面的".\;",这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件,至于CLASSPATH后面指定tools.jar这个具体文件,是由java语言的import机制和jar机制决定的。 设置方法:CLASSPATH = .\;%JAVA_HOME%\lib\tools.jar ANT环境变量设置 Windows下ANT用到的环境变量主要有2个,ANT_HOME 、PATH。 设置ANT_HOME指向ant的安装目录。 设置方法:ANT_HOME = D:\apache_ant_1.7.0 将%ANT_HOME%\bin; %ANT_HOME%\lib添加到环境变量的path中。 设置方法:PATH = %ANT_HOME%\bin; %ANT_HOME%\lib 本文来自[Svn中文网]转发请保留本站地址:http://www.svn8.com/java/pz/20080530/705.html......

阅读全文(2029) | 评论:0

网络编程(2010-03-23 20:22:00)

摘要:http://www.51chm.org/mfc/class/CAsyncSocket_SendTo.shtml......

阅读全文(1389) | 评论:0

work thread和UI thread的区别(包括产生以及终结)(2010-03-23 18:55:00)

摘要:一、线程产生篇: 它们都需要呼叫AfxBeginThread 以产生一个 CWinThread 对象,并在创建对象的时候定义其消息响应函数,下面代码是work thread所呼叫的AfxBeginThread函数: CWinThread* pThread = AfxBeginThread(ThreadFunc, &Param); 函数原型是: CWinThread* AFXAPI AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL); 但如果要产生一个UI thread,你还必须先定义一个 CWinThread 衍生类别,因为现在需要一个消息回路,CWinThread::Run里头就有一个消息回路,然后再呼叫AfxBeginThread产生一个CWinThread对象。下面代码是UI thread所呼叫的AfxBeginThread()函数: CWinThread *pThread = AfxBeginThread(RUNTIME_CLASS(CMyThread)); 函数原型是: CWinThread* AFXAPI AfxBeginThread(CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL); 注意:UI thread的消息响应函数原型和work thread的消息响应函数是两个不同的重载函数。 二、线程结束篇 既然 worker thread 的生命就是线程函数本身,函数一旦 return,线程也就结束了,自然得很。或者线程函数也可以呼叫 AfxEndThread,结束一个线程。UI 线程因为有消息回路的关系,必须在消息队列中放一个 WM......

阅读全文(3292) | 评论:0

linux及windows下网格模拟器OptorSim2.0的安装方法 【转】(2010-03-16 16:06:00)

摘要:linux及windows下网格模拟器OptorSim2.0的安装方法 【转】 2009-10-29 17:22 OptorSim2.0在linux下的安装: 1、安装 jdk 下载最新版的jdk1.6版本 jdk-1_5_0_08-linux-i586.bin 到 /usr/jdk-1_5_0_08-linux-i586.bin 执行 chmod 777 jdk-1_5_0_08-linux-i586.bin ./jdk-1_5_0_08-linux-i586.bin 运行完毕后,设置环境变量(/etc/profile) JAVA_HOME=/usr/jdk1.6.0CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASS_PATHPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHexport JAVA_HOME CLASS_PATH PATH source /etc/profile java -version 如果安装成功。系统会显示java version jdk"1.4.1_02"......(不同版本号则显示不同) 2、安装ant 下载 apache-ant-1.6.2-bin.tar.gz 到/usr/apache-ant-1.6.2-bin.tar.gz 执行 tar zxvf apache-ant-1.6.2-bin.tar.gz 配置环境变量(/etc/profile): ANT_HOME=/usr/apache-ant-1.6.2CLASS_PATH=$ANT_HOME/lib:$CLASS_PATHPATH=$ANT_HOME/bin:$PATHexport ANT_HOME CLASS_PATH PATH source /etc/profile 3、安装 OptorSim 2.0 下载optorsim-2.0.tar.gz 到 /usr/optorsim-2.0.tar.gz tar zxvf optorsim-2.0.tar.gz 设置环境变量(/etc/profile): exprot OPTORSIM_HOME=/usr/optorsim-2.0 export PATH=$PATH:$OP......

阅读全文(4483) | 评论:4