C/C++
subkiller
这个作者很懒,什么都没留下…
展开
-
C++学习(一)
在C++中,参数的传递方式主要有两种:值传递和引用传递。其中值传递在C语言中早已接触,没有什么可以说的。我想重点谈下引用传递。 引用传递: 在C++语言中,引用传递可以有两种方式,一种是采用指针作为函数参数,一种是采用引用作为函数参数。 1.通过指针作为函数参数#include void swap(int*x,int*y);原创 2008-10-24 22:11:00 · 672 阅读 · 0 评论 -
关于PrefetchAbort
在LPC2132平台下调试UART,发现程序总是死在了PrefetchAbort;取指令中止PrefetchAbort B PrefetchAbort经过仔细的查看和分析程序,原来是自己没有添加关键字__irq。导致中断程序退出异常。原创 2012-05-22 15:42:58 · 1724 阅读 · 0 评论 -
problem with makefsfile
使用TI makefsfile程序生成文件时,总是不能显示正常的网页。在网上查找到原因。原来是makefsfile参数设置不对,应该使用以下形式: makefsfile -i fs -o io_fsdata.h -r -h Just to give you some background, without the "-h" option, makefsfile doe原创 2012-04-17 16:58:03 · 1257 阅读 · 0 评论 -
将32位int型变量拆成4个8位char类型变量 (2种方法)
一、用强制指针类型转换方法#include int main (){unsigned long a=0x12345678;unsigned char *pa;unsigned char tab[4];pa=(char *)&a;tab[0]=*((char *)pa+0);tab[1]=*((char *)pa+1);tab[2]=*((char *)p原创 2012-05-29 11:33:38 · 13901 阅读 · 2 评论 -
语言编程需要注意的64位和32机器的区别
一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较:16位平台char 1个字节8位short 2个字节16位int 2个字节16位long 4个字节32位指针 2个字节32位平台char转载 2011-12-15 15:12:28 · 637 阅读 · 0 评论 -
网络序列与主机序列
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数。网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long" ntohl()--"Network to Host Long" htons()转载 2011-10-19 16:58:26 · 1275 阅读 · 0 评论 -
数据类型后缀
一般来说,整数常量是被当作 int 类型来存储的。如果我们使用的整数常量超出了 int 的表示范围,C 语言规定编译器自动使用 unsigned int 来处理这个常量。如果 unsigned 也不足以表示这个常量的话,编译器就会用 long。如果还表示不了的话,那就依次用 un转载 2011-10-14 10:51:56 · 1808 阅读 · 0 评论 -
C语言预编译指令
一、预处理的由来: 在C++的历史发展中,有很多的语言特征(特别是语言的晦涩之处)来自于C语言,预处理就是其中的一个。C++从C语言那里把C语言预处理器继承过来(C语言预处理器,被Bjarne博士简称为Cpp,不知道是不是C Program Preprocessor的简称)转载 2011-07-21 11:10:31 · 5312 阅读 · 1 评论 -
如何读懂C语言指针
<br />C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的: <br /><br />The right-left rule: Start reading the declaration from th转载 2011-05-25 13:46:00 · 1696 阅读 · 0 评论 -
串口接收信息函数
/********************************************************************************************************* Description: reciever message via uart** Arguments : ptr ---- a pointer used for data原创 2012-06-19 09:20:21 · 1412 阅读 · 0 评论 -
使用typedef定义函数指针
关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); }转载 2012-03-05 15:59:02 · 18815 阅读 · 0 评论 -
Code::Blocks : undefined reference to `xxxxxx@4'
使用CodeBlocks在编译程序的时候出现如下错误:undefined reference to `inet_addr@4'undefined reference to `gethostbyname@4'undefined reference to `WSAGetLastError@0'undefined reference to `inet_ntoa@4'undefined原创 2012-12-20 11:36:22 · 14142 阅读 · 5 评论 -
Qt串口类的问题
不知道大家有没有遇到过这样的情况,用串口类的时候,无法打开串口号大于10的串口! 感觉很奇怪,用的USB转232的串口线,就无法打开串口号大于10的串口,然后用yafeilinux上的WinCom也是出线相同的问题!是在Windows上用的 去网上搜了一下:发现了问题。改成下面这样确实能用:Com = new Win_QextSerialPort("\\\\转载 2012-12-20 14:43:19 · 2000 阅读 · 0 评论 -
explicit keyword
In C++, the compiler is allowed to make one implict conversion to resolve the parameters to a function. What this means is that the compiler can use single parameter constructors to convert from one t转载 2012-11-13 16:10:21 · 608 阅读 · 0 评论 -
__IO_CALC_ADDRESS_DYNAMIC和__IO_CALC_ADDRESS_NATIVE
__IO_CALC_ADDRESS_DYNAMIC(BASE,OFFSET)用于计算以动态地址对齐方式与Avalon总线互连的外设的寄存器的物理地址,其输入参数分别为外设的基地址BASE以及目标寄存器在外设中的地址偏移量OFFSET。#define __IO_CALC_ADDRESS_DYNAMIC ((void *)(((alt_u8*)BASE)+(OFFSET)))原创 2012-10-15 09:29:49 · 1820 阅读 · 0 评论 -
C++引用与指针的比较
引用是C++中的概念,初学者容易把引用和指针混淆一起。 以下程序中,n是m的一个引用(reference),m是被引用对象(referent)。 int m; int &n = m; n相当于m的别名(绰号),对n的任何操作就是对m的操作。 所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。 引用的规则: (1)引用被创建的同时必须被初始化(指针则可转载 2012-09-17 17:06:50 · 606 阅读 · 0 评论 -
C++基础:多态
多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphisn),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。(这里我觉得要补充,重写的话可以有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的转载 2012-08-17 15:21:36 · 610 阅读 · 0 评论 -
字符编码:ASCII,Unicode和UTF-8
今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。1. ASCII码我们知道,在计算机内部转载 2011-06-27 16:15:00 · 738 阅读 · 0 评论 -
[C] 字节对齐
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数转载 2012-03-08 13:34:13 · 797 阅读 · 0 评论 -
如何判断栈的增长方向?
<br />对于一个用惯了i386系列机器的人来说,这似乎是一个无聊的问题,因为栈就是从高地址向低地址增长。不过,显然这不是这个问题的目的,既然把这个问题拿出来,问的就不只是i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。<br /><br />在一个物质极大丰富的年代,除非无路可退,否则我们坚决不会使用汇编去解决问题,而对于这种有系统编程味道的问题,C是一个不错的选择。那接下来的问题就是如何用C去解决这个问题。<br /><br />C在哪里会用到栈呢?稍微了解一点C的人都会立刻给出答案,没转载 2011-03-23 10:23:00 · 776 阅读 · 0 评论 -
ucos中如何定义全局变量
<br /> 以下是如何定义全局变量。众所周知,全局变量应该是得到内存分配且可以被其他模块通过C语言中extern关键字调用的变量。因此,必须在 .C 和 .H 文件中定义。这种重复的定义很容易导致错误。以下讨论的方法只需用在头文件中定义一次。虽然有点不易懂,但用户一旦掌握,使用起来却很灵活。表1.2中的定义出现在定义所有全局变量的.H头文件中。<br /> <br />程序清单 定义全局宏。<br />#ifdef xxx_GLOBALS<br />#define xxx_EXT<br /转载 2011-03-21 14:36:00 · 5832 阅读 · 2 评论 -
深入浅出VC++串口编程之基本概念
<br />引言<br /><br /> 在PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。我们可以通过设备管理器来查看COM的硬件参数设置,如图1。<br /><br />图1 在Windows上查看PC串口设置<br /><br /> 迄今为止,几乎每一台PC都包含COM。本质而言,COM是PC为和外界通信所提供的一种串行数据传输的接口。作为一种物理通信的途径和设备,它和目前风靡的另一种串行接口――USB所提供的功能是一致的。原创 2010-12-18 11:55:00 · 944 阅读 · 0 评论 -
螺旋队列
<br />螺旋队列如下图:<br /> <br /> <br /> <br />两大规律:<br />1。螺旋规律(红线)<br />2。奇数平方规律(紫线)<br /> <br />问题描述:<br /> <br />设1的坐标是(0,0),的方向向右为正,y方向向下为正,例如,7的坐标为(-1,-1),<br />2的坐标为(0,1)。编程实现输入任意一点坐标(x,y),输出所对应的数字!<br /> <br /> <br />问题解决:<br />从紫线突破。从图中不难发现,右上角vc=(2*t+转载 2010-12-03 17:37:00 · 557 阅读 · 0 评论 -
打印一个螺旋图
int i=5; 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 int i=6 1 2 3 4 5 6 20 21 22 23 24 7 19 32 33 34 25 8 18 31 36 35 26 9 17 30 29 28 27 10 16 15 14 13 12 11 <br />要求按照以上规律打印数字<br />#include <st原创 2010-12-04 21:08:00 · 740 阅读 · 0 评论 -
GCC错误:stray '/161' in program
今天使用Code Blocks编译程序时,编译器报错:GCC错误:stray /161 in program 仔细检查了半天,看不错什么错误。最后发现原来是因为那行出现了全角字符. 重新把出错的那行全部删了,重新输入。OK 一切搞定!原创 2008-11-12 22:45:00 · 5104 阅读 · 0 评论 -
讲讲volatile的作用
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 使用该关键字的例子如下: int volatile nVint; >>>>当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前转载 2008-11-04 14:06:00 · 1608 阅读 · 1 评论 -
static的作用
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = A; // global variablevo转载 2008-11-04 12:36:00 · 732 阅读 · 0 评论 -
说说异或运算^和他的一个常用作用 (转载)
说说异或运算^和他的一个常用作用。异或的运算方法是一个二进制运算:1^1=00^0=01^0=10^1=1两者相等为0,不等为1.这样我们发现交换两个整数的值时可以不用第三个参数。如a=11,b=9.以下是二进制a=a^b=1011^1001=0010;b=b^a=1001^0010=1011;a=a^b=0010^1011=1001;这样一来a=9,b=11了。举一个运用, 按一个按钮交换两个m原创 2008-10-30 11:32:00 · 676 阅读 · 0 评论 -
C++学习(三)
这几天忙着跑招聘会,把学习的事搁一边啦。心里面没有满足感,于是又开始学习C++啦。毕竟自己选定的路不能就这样放弃啊!对于上次遇到的问题:为什么VC6.0编译出现以下错误E:/VC++/exercise/ex6/constructor.cpp(18) : error C2533: CDog::CDog : constructors not allowed a return原创 2008-10-27 20:49:00 · 734 阅读 · 0 评论 -
深入浅出VC++串口编程之DOS的串口编程
<br />在DOS平台下,操作串口主要有下列方式:通过BIOS调用、通过串口的硬件中断或通过对串口硬件进行轮询,本章将对以上三种方式进行具体的介绍并给出例子。<br /><br /> 1.BIOS中断<br /><br /> 在DOS操作系统下,IBM PC及其兼容机提供了一种灵活的串口I/O访问方法,即通过INT 14H调用ROM BIOS串行通讯例行程序。当设置AH为不同的值时,产生不同的功能:<br /><br /> AH 0 初始化端口<br /> AH 1 向串口写字符<br /> A原创 2010-12-18 11:57:00 · 848 阅读 · 0 评论 -
深入浅出VC++串口编程之基于Win32 API
<br />1、API描述<br /><br /> 在WIN32 API中,串口使用文件方式进行访问,其操作的API基本上与文件操作的API一致。<br /><br /> 打开串口<br /><br /> Win32 中用于打开串口的API 函数为CreateFile,其原型为:<br />HANDLE CreateFile (<br /> LPCTSTR lpFileName, //将要打开的串口逻辑名,如COM1 或COM2<br /> DWORD dwAccess, //指定串口访问的类型,可以原创 2010-12-18 11:59:00 · 1323 阅读 · 0 评论 -
c语言命名规则
1、变量名长度应当符合“min-length && max-information”原则。2、命名规则尽量与所采用的操作系统或开发工具的风格保持一致。3、不能靠大小写来区分不通变量。4、名词变量用“名词”或者“形容词+名词”的形式,动词用动宾形式。5、如果需要有特定意义的,应该在变量命名是有所体现,如反义等;但是不推荐使用数字标记,如name1,name2;6、关于大小写规则。变量第一个为小写,但第二个词为大写开始,如:newName;而函数名两个都为大写开头,如:GetName();7、常量都为大写,同时转载 2011-02-25 10:43:00 · 1299 阅读 · 0 评论 -
结构体初始化的方法
<br /> 最近项目小组在去除代码中的warning,在修正代码的过程中看到了对结构体不正确的初始化方式:<br />假设有一个如下的struct定义:<br />struct astruct<br />{<br /> int a;<br /> int b;<br />};<br />struct astruct test={0};<br />即使astruct中都是基础类型的成员这样的初始化话也是不正确的。<br />这种初始化仅仅是把a变量设置为了0,而未对b变量做初转载 2011-02-24 19:04:00 · 12216 阅读 · 1 评论 -
const用法详解
<br />面向对象是C++的重要特性. <br />但是c++在c的基础上新增加的几点优化也是很耀眼的<br />就const直接可以取代c中的#define<br />以下几点很重要,学不好后果也也很严重<br /> <br />const<br />1. 限定符声明变量只能被读<br /> const int i=5;<br /> int j=0;<br /> ...<br /> i=j; //非法,导致编译错误<br /> j=i; //合法<br />2. 必须初始化<转载 2010-11-19 22:48:00 · 834 阅读 · 0 评论 -
常用算法——递归
递归是设计和描述算法的一种有力的工具,由于它在复杂算法的描述中被经常采用,为此在进一步介绍其他算法设计方法之前先讨论它。 能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,能直接得解。 【问题】 编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)。 斐波转载 2010-12-31 00:06:00 · 950 阅读 · 0 评论 -
Duff's device
算法转载 2010-11-04 18:19:00 · 4592 阅读 · 0 评论 -
如何使用CnComm开发串口通信程序
<br />CnComm是由程序员llbird开发的C++串口通讯类,功能丰富实用。类的声明和实现都被定义在一个头文件中,使用方法简单,特别是对接收数据处理只要重载虚函数OnReceive即可,下面给出CnComm使用的简单步骤。<br />1.新建Visual C++工程,加入头文件CnComm.h。<br />2.以CnComm为基类建立新类CCom,并重载虚函数OnReceive。<br />3.包含头文件Com.h,定义串口对象CCom NewCom;。<br />4.打开串口NewCom.Open转载 2010-12-18 12:03:00 · 10388 阅读 · 0 评论 -
深入浅出VC++串口编程之基于控件
深入浅出VC++串口编程之基于控件源代码下载<br />MSComm控件<br /><br /> Visual C++为我们提供了一种好用的ActiveX控件Microsoft Communications Control(即MSComm)来支持应用程序对串口的访问,在应用程序中插入MSComm控件后就可以较为方便地实现对通过计算机串口收发数据。<br /><br /> 要使用ActiveX控件MSComm,程序员必须将其添加入工程,其方法是:<br /><br /> (1)单击主菜单project的原创 2010-12-18 12:00:00 · 1101 阅读 · 0 评论 -
深入浅出VC++串口编程之第三方类
深入浅出VC++串口编程之第三方类源代码下载 <br /> 串口类<br /><br /> 从本系列文章连载三、四可以看出,与通过WIN32 API进行串口访问相比,通过MScomm这个Activex控件进行串口访问要来的方便许多,它基本上可以向用户屏蔽多线程的细节,以事件(发出OnComm消息)方式实现串口的异步访问。<br /><br /> 尽管如此,MScomm控件的使用仍有诸多不便,譬如其发送和接收数据都要进行VARIANT类型对象与字符串的转化等。因此,国内外许多优秀的程序员自己编写了一些原创 2010-12-18 12:02:00 · 1911 阅读 · 0 评论 -
#ifdef __cplusplus到底是什么意思?
时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代转载 2011-10-17 16:22:49 · 621 阅读 · 0 评论