c++
文章平均质量分 50
fengyunjh
研究嵌入式、软件开发、FPGA、视频编解码(曾经)。
在这里记录下自己学习的点滴,完成艰难的学习任务,
欢迎来讨论。
展开
-
找不到MFC的winmain,why?
mfc程序确实没有main的 只有winmain 这是window32程序的入口但是在mfc里你是看不到winmain的,因为它被封装在一个类里面。 应用程序执行时,Windows自动调用应用程序框架内部的WinMain函数。如清单3-1所示,WinMain函数会查找该应用程序的一个全 局构造对象,这个对象是由CWinApp派生类构造的,有且只有一个。它是一个全局对象,因此在程序启动时,它就已经被构造好了。 随后,WinMain将调用这个对象的InitApplication和InitInstan原创 2010-12-08 18:19:00 · 1150 阅读 · 0 评论 -
for循环语句头的执行顺序
for循环语句头有3个部分:初始化、判读条件、一个表达式有3个疑惑:1、第一次例如初始化i=0,是否还执行后面的i++或++i?第一次先初始化,然后判断,i++就不执行了2、第一次完了以后,初始化这句就不用了,是先执行i++还是限制性判断语句呢?先执行i++3、现在知道是先执行i++,再执行判断语句,i++不是后++吗,例如i为1,那i++后执行判断语句,i是几呢?i是2.4、好像i++和++i在for()里时结果都一样。都一样,for语句头的执行顺序决定了这两个写法都一样,都是i++或这++i这两句执行完原创 2011-01-24 15:40:00 · 21953 阅读 · 3 评论 -
为什么带符号的8位二进制数是-128~127啊!而不是-127~127啊!
<br />因为一个带符号数和一个不带符号数一样,8位能表示256个值,如果是-127~127的话,只有255个数!那还少一个。因为7位可以表示128个数,那加上正负肯定能表示256个不同的数。+0的补码就是其原码,也就是说是0000 0000而已(对于8位来说)-0的补码是其反码加1,其反码是1111 1111,当然,其反码加1后就是溢出一个进位后,仍然是0000 0000.所以0和-0的补码都是0000 0000根据补码原则,0000 0000表示0,而1000 0000却不能表示-0,所以根据原创 2011-01-24 19:40:00 · 9530 阅读 · 0 评论 -
[C++]main函数为什么要有返回类型int?
<br />c语言规范中,最好main是有返回值的,即使没有,其实编译器也会给你加上。 <br />Main函数的返回值是提供给它的激发程序,判断其运行状态的,比如是否成功。 <br />一般情况下,返回给操作系统;特殊情况下,可以通过别的程序调用这个程序,同时捕获这个程序main的返回值。 <br /><br />另外,当前程序其实也可以调用main函数,所以也可以利用返回值。原创 2011-01-24 10:56:00 · 3473 阅读 · 0 评论 -
debug和release的区别
<br />先来看百度知道里搜到的:<br /> <br /><br /> <br /> <br />最佳答案<br /> <br /> <br /> Debug和Release的主要区别在于程序是否被优化。Debug不做任何优化,如果你看命令行,里面应该有/Od;Release做优化,命令行里是/O2 /GL。/O2代表最大限度的优化,/GL代表把代码生成推迟到链接的时候做,这样优化器可以看到所有的函数,有足够的信息做最大限度的优化。两者都可以包含调试信息。对于Release,可以用/Zi来表示要原创 2011-01-24 22:00:00 · 809 阅读 · 0 评论 -
[原创]什么叫左值、右值。以及为什么返回类型要用引用。
<br />如果不返回引用那作为右值没有问题,即只能拿来用,不能对其赋值。一般的函数返回值都是拿来用的,如果想要对返回值赋值,则返回引用类型。所以返回引用类型就这个作用。<br /><br />举例:以下是何洁月视频中定义动态数组类array<T>时,类里重载[]运算符的函数定义。只用返回引用类型,那么才可以将返回的如a[1]作为左值对其赋值。// 重载下标操作符,实现与普通数组一样通过下标访问元素,并且具有越界检查功能template <class T>T& Array<T>::ope原创 2011-02-25 17:15:00 · 1528 阅读 · 0 评论 -
【原创】指针数组才能用指针的指针来表示。普通的二维数组只能用T (*p)[]来等价
<br />指针数组才能用指针的指针来表示。普通的二维数组只能用T (*p)[]来等价<br /> <br />如下:<br /> 在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language 2e(《C 程序设计语言第二版》)用的就是 main( )。不过在最新的 C99 标准中,只有以下两种定义方式是正确的:<br /> int main( void ) int main(原创 2011-02-27 17:30:00 · 663 阅读 · 0 评论 -
数组和指针
<br /><br />将 matrix 声明为指向含有 10 个 int 型元素的数组的指针。 <br />再次强调,*matrix 两边的圆括号是必需的<br />int *matrix[10]; // array of 10 pointers <br />int (*matrix)[10]; // pointer to an array of 10 <br /> <br />下面橘红色标记的那个就是数组指针,指向数组的指针。<br />且第一个表示的是一个多维数组,一维的是int *matrix原创 2011-02-08 22:03:00 · 602 阅读 · 0 评论 -
宏是文本替换,不做任何计算
看到csdn的一个帖子,总结如下。帖子如下:#define定义的仅仅是“替换”吗?它竟然能计算![Quote=引用楼主 johnphan 的回复:]#define five 2+2+1这个five是在那里计算的呢?经过程序验证,是在#define five 2+3这句中就计算了。(也就是预处理器preprocessor计算的)而不是先替换,然后在程序中完成计算的。但在正式的课本中没有查到有关的论述。谁能给出这方面的参考资料?[/Quote][Quote=引用 3 楼 arong1234 的回复:]这和宏没有原创 2011-02-14 22:17:00 · 1549 阅读 · 0 评论 -
【原创】多态性、动态多态性、静态多态性、虚函数、纯虚函数、抽象类总结
多态性: 多态性就是多种表现形式,具体来说,可以用"一个对外接口,多个内在实现方法"表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。 多态性也分静态多态性和动态多态性两种。静态多态性是指定义在一个类或一个函数中的同名函数,它们根据参数表(类型以及个数)区别语义,并通过静态联编实现,例如,在一个类中定义的不同参数的构造函数。动态多态原创 2011-02-16 19:23:00 · 2420 阅读 · 0 评论 -
野指针(居然有三种类型,貌似第二和三有些类似)
<br />野指针<br />定义“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。成因野指针的成因主要有三种: 一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。 二、指针p被free或者delete之后,没有置为NULL,让人误以为p是转载 2011-03-05 10:05:00 · 1015 阅读 · 0 评论 -
生成对象必须new吗,不是的,也可以不用,这样对象空间你在栈里。但java里不同
RT,不过,栈的空间很小,做好还是放在堆里,所以一般类定义对象时都是new一个。=========请问C++ 生成对象用栈空间和堆空间和什么区别?用堆空间有什么优势吗?我可懒得去new又去delete。答:二者特性不同,各有适用场合。首先,最重要的一点,对象生存期不同。栈原创 2011-07-14 11:50:40 · 2867 阅读 · 0 评论 -
全局变量
不是说extern是声明全局变量的,不是。只要是函数外的变量声明都叫全局变量。全局变量也叫外部变量。原创 2011-01-14 00:19:00 · 717 阅读 · 0 评论 -
[推荐] 手机RAM,Flash ROM、内存概念的困惑,看你是否真的明白(转)
转的一个帖子,来自csdn 问题是: 我把手机(不带存储卡)插在电脑上,显示两个盘符,其中一个点击无法进入,另一个打开之后,显示有我的照片、我的收藏、我的音乐等文件夹! 我们知道我们可以对这个盘进行读写,比如我们拍的照片就可以直接存放到这个盘上!我现在有一个困惑,我之前只知道手机上一般有ROM和RAM ,ROM是只读存储器;RAM是内存,用来跑程序之用,掉电易失! 可目前来看好像还有一个盘,用来存放“我的照片,我的收藏,我的音乐...",这个是单独的存储器吗? 我在网上查了一下,有人说原创 2011-01-10 09:52:00 · 2689 阅读 · 0 评论 -
VC编程问题:为什么在Windows中这样定义POINT?(转)
在Windows中的POINT结构如下定义:typedef struct tagPOINT{ LONG x; LONG y;}POINT;谁解释一下?为什么不直接这样定义:struct POINT{ LONG x; LONG y;};我在编程调试时tagPOINT可以代替POINT!最佳答案在早期的C代码中,声明struct对象时,必须要带上struct,即形式为: struct 结构名 对象名,如:struct tag原创 2011-01-07 10:25:00 · 1891 阅读 · 0 评论 -
MFC中的afx_msg和BEGIN_MESSAGE_MAP
BEGIN_MESSAGE_MAP 下面是定义:什么事件发生时该执行哪个子程序。 是MFC定义的宏,表示开始一个消息的映射描述。 BEGIN_MESSAGE_MAP( theClass, baseClass ) Parameters theClass Specifies the name of the class whose message map this is. baseClass Specifies原创 2010-12-08 22:38:00 · 3168 阅读 · 0 评论 -
为什么计算机要追求大内存呢?从算法级来回答。
<br />以前小内存程序一样运行。<br />内存大了我们才可以运行更大的程序,才能运行的出更漂亮的界面。<br /> <br />为什么内存打了会使速度变快呢?<br />是用空间换取了速度。<br /> <br />比如数据结构里学的矩阵的两个经典算法:<br />第一个算法思路清晰,但是每转置一个都要扫描一遍矩阵,时间复杂度高,o(n3)。但是没有申请额外的空间。<br /> <br />快速转置申请了两个额外的空间,但是时间复杂度大大降低。<br /> <br />这就是用空间换取了时间。<br原创 2010-12-14 21:20:00 · 535 阅读 · 0 评论 -
纠正以前的错误理解,总以为进程是个划分的很小的一个东西。其实进程和程序的区别不大。
<br /> <br />以前总以为进程是个很小的东西。<br /> <br />今天看了进程和程序的区别才明白。进程和程序的区别不大。<br /> <br />程序静态的,存储在瓷盘里的。<br />运行起来的程序就是进程了。<br /> <br />见网络上的解释:<br />进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。<br /> <br /> 对应用程序来原创 2010-12-14 21:45:00 · 552 阅读 · 0 评论 -
重新认识串口,使用交叉还是直连串口线 (转)
http://hi.baidu.com/%CD%FE%B5%C4%C9%FA%BB%EE/blog/item/648e12502186182942a75b2e.html/cmtid/d216fe8a906cf61cc8fc7af7 从接触51单片机开始就认识了串口,但前段时间越想越对串口迷茫:公头、母头、直连串口线、交叉串口线,这些到底该怎么连接把我搞得晕头转向。终于在不断的查阅资料、静静的苦思冥想和不断的看电路图、用万用表测试中,对串口有了透彻、清晰的认识。 先说一下我在很久以前遇到的一个小问题。我最原创 2010-12-16 09:30:00 · 1912 阅读 · 0 评论 -
Linux下用C实现串口读写(转)
http://hi.baidu.com/%CD%FE%B5%C4%C9%FA%BB%EE/blog/item/0110068308c5fb9cf603a6be.html 之前要做一个和串口相关的项目,才认真研究了下串口,首先就是要实现串口和PC机的通信。 串口的驱动一般不需要我们写,都是很成熟的驱动,要知道的一点就是你开发板串口的名称,比如ttySAC0,等。所以主要的工作就是编程序,实现串口的收发,这当然也好理解,就把串口当成文件,对其进行读写就可以了。原创 2010-12-16 18:28:00 · 8590 阅读 · 0 评论 -
Linux下串口编程心得
转自:http://blog.sina.com.cn/s/blog_5335d4340100c7ba.html 最近一段时间,需要完成项目中关于Linux下使用串口的一个部分,现在开帖记录过程点滴。 项目的要求是这样的,Qt应用程序主要完成数据采集和发送功能,原来采用的是把ARM板的串口设置城网口,然后通过拨号上网,通过socket编程实现数据的传输的。后来发现稳定性不高,于是换了一个第三方公司生产的DTU,希望直接往串口传输数据。 一开始在google中海搜关键字“Qt串口编程”,得出的结论是原创 2010-12-16 18:30:00 · 1977 阅读 · 0 评论 -
串口总结
此篇不是把窜口所有的用法都写上,我是参照黑金的pdf做的实验,只是把我当时不好理解的,看书也看不懂的做了下总结。呵呵,总有一些东西是书上将不明白的。 以方便下次做实验的时候参考。 1.波特率。很多朋友友都理解“波特率”是串口传输的传输速度,这样的理解基本上是无误。但是在微观上“波特率”就是“一个位的周期”。 “9600 bps” 表示每秒可以传输9600位。 那我们算一下一个位的周期,即传输一位需要的时间。 2、对于任何接受串口模块的数据,在fpga上,只要连接数据输入接口就ok原创 2010-12-17 15:23:00 · 756 阅读 · 0 评论 -
VC: Win32 Application和Win32 Console Application、MFC APPWIZARD区别
都是工作在32位Windows环境的程序。 Win32 Application :是普通的常见的窗口应用程序,当然有的界面做得比较个性化,比如 圆形的、不规则形状的…… 它们都是所谓的GUI(Graphics User Interface图形用户接口),我们 可以通过鼠标点击来完成控制。 Win32 Application:是为你开发windows应用程序所准备的,程序 以WinMain()为入口,#include,能够使用win32 API函数。 而Win32 Console原创 2010-12-27 22:33:00 · 1864 阅读 · 0 评论 -
DLL,哪天能把你搞懂了啊?那就幸福了。
None原创 2010-11-06 11:07:00 · 448 阅读 · 0 评论 -
vc6.0常见错误fatal error C1083: Cannot open precompiled header file: 'Debug/**.pch': No such file or directory
fatal error C1083: Cannot open precompiled header file: 'Debug/**.pch': No such file or directory 在网上搜集了一下,这个错误是预编译文件的设置造成的,有几种可以尝试的途径: 1)单独编译StdAfx.cpp 2)编译所有(即按Ctrl+F7) 3)在工程-设置-c++-最下面的工程选项里去掉××。pch文件 4)在工程-设置-c++-在分类里选择预编译头文件,选择自动使用预补偿页眉,或者选择不使用预原创 2011-01-06 15:34:00 · 11134 阅读 · 2 评论 -
vc6.0菜单属于框架类,工作区属于view类
菜单属于框架类 工作区属于view类原创 2011-01-06 15:49:00 · 794 阅读 · 0 评论 -
递归的缺点,如何解决
递归的缺点:递归太深容易造成堆栈的溢出。 帖子一:如何解决递归调用的栈空间不足 推荐答案这个跟C++关系不是太大,跟系统和开发环境有关.并且这个栈的大小,也是可以调节的做好不要在函数内部定义很大的数组.也不能让程序出现无限递原创 2011-09-18 15:42:53 · 12337 阅读 · 1 评论