c/c++
文章平均质量分 53
南浦秋叶
这个作者很懒,什么都没留下…
展开
-
类的构造函数、析构函数与赋值函数
构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如 A(void);原创 2013-05-17 13:04:33 · 448 阅读 · 0 评论 -
程序跳转
程序跳转示例性跳转代码如下:typedef void (*pFunc)(void);//自定义函数指针数据类型pFunc Jump_To_App;//定义一个指向应用程序的指针Jump_To_App=(pFunc)0x08004000;Jump_To_App();需要注意的是,在程序执行跳转代码前,需要关闭中断响应,以避免发生不可预测的异常。同时,当程序跳转前,需要原创 2013-01-22 14:43:41 · 622 阅读 · 0 评论 -
预编译头文件
stdafx.h 的作用: 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。 预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是project原创 2013-01-22 22:07:26 · 310 阅读 · 0 评论 -
模块独立
内聚(cohesion)是一个模块内部各成分之间相互结合的紧密程度耦合(coupling)是模块之间相互关联的紧密程度在模块化设计中,要追去弱耦合、强内聚尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合原创 2013-01-22 22:07:17 · 645 阅读 · 0 评论 -
C++静态成员
有时,可能需要一个或多个公共的数据成员,能够被类的所有对象共享。在C++中,可以定义静态(static)的数据成员和成员函数;静态数据成员不同于非静态的数据成员,一个类的静态数据成员仅创建和初始化一次,且在程序开始执行时创建,然后被该类的所有对象共享;而非静态的数据成员随着对象的创建而多次创建和初始化;静态的数据成员能被所有的对象共享,也就是说,静态数据成员不属于对象,而是属于类的。与静态原创 2013-01-22 22:06:34 · 458 阅读 · 0 评论 -
数组作为函数的参数传递
编了一个小程序,忽然发现一些数组作为函数参数值传递的问题,对于一维数组,数组作为函数参数传递,实际上传递了一个指向数组的指针,在c编译器,当数组名作为函数参数时,在函数体内数组名自动退化为指针,例如:#include void print(int *a){printf("%d\n",sizeof(a));}int main(void)原创 2013-01-22 22:06:25 · 647 阅读 · 0 评论 -
我设计的注释风格
/********************************************************Copyright(C),2012-2014,Zhejiang University** 文 件 名:** 创 建 人: 郑涛** 版 本:** 完成日期: 年月日** 描 述: **********************************原创 2013-01-22 22:06:21 · 337 阅读 · 0 评论 -
栈(stack)和堆(heap)具体的区…
1、在申请方式上栈(stack): 现在很多人都称之为堆栈,这个时候实际上还是指的栈。它由编译器自动管理,无需我们手工控制。 例如,声明函数中的一个局部变量 int b 系统自动在栈中为b开辟空间;在调用一个函数时,系统自动的给函数的形参变量在栈中开辟空间。堆(heap): 申请和释放由程序员控制,并指明大小。容易产生memory leak。在C中使用malloc函数。原创 2013-01-22 22:05:46 · 359 阅读 · 0 评论 -
函数调用约定
函数调用约定包括传递参数的顺序,谁负责清理参数占用的堆栈等,例如 : 参数传递顺序谁负责清理参数占用的堆栈__pascal从左到右调用者__stdcall从右到左被调函数__cdecl从右到左调用者调用函数的代码和被调函数必须采用相同的函数的调用约原创 2013-01-22 22:05:50 · 397 阅读 · 0 评论 -
c语言变长参数函数
1、 要在函数中包含可变参数,首先应该在头文件中包含,即#include。这个头文件声明了一个va_list类型和四个操作可变参数的函数:voidva_start(va_list ap, argN);voidva_copy(va_list dest, va_list src);typeva_arg(va_list ap, type);voidva_end(va_li原创 2013-01-22 22:05:52 · 450 阅读 · 0 评论 -
函数调用方式
(1) _stdcall调用_stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。WIN32 API都采用_stdcall调用方式,这样的宏定义说明了问题: #define WINAPI _stdcall 按C编译方式,_stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_functio原创 2013-01-22 22:05:48 · 309 阅读 · 0 评论 -
C语言程序所占内存分类
(1)栈(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值、返回地址等,其操作方式类似于数据结果中的栈。栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{ }”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中原创 2013-01-22 22:05:44 · 567 阅读 · 0 评论 -
内联函数
在c++中,由于调用函数时有入栈出栈的操作(编译期间),为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题,函数的死循环递归调用的最终结果就原创 2013-01-22 22:05:42 · 308 阅读 · 0 评论 -
类的构造函数、析构函数与赋值函数示例
今天上网无意中看到一个大牛写的文档,《高质量C/C++编程指南(林锐)》,看了一些,发现果然精彩,特别结合这一段时间的实习生笔试和面试,很多问题在这篇文档里讲到了,譬如昨天到浙江大华技术去笔试时,就碰到了这样一个题目,一个类如下:class CString{public:CString(const char *str = NULL);//普通构造函数CString(const原创 2013-05-17 14:45:22 · 1175 阅读 · 0 评论 -
iostream和iostream.h的区别
前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因 此,当使用时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c原创 2012-11-13 10:47:06 · 437 阅读 · 0 评论 -
Unicode和ANSI字符串
这几天在WinCE编程中,总是遇到一些字符集之间的转换,所以就总结一下。Unicode字符串也就是wide-char string,采用双字节编码,ANSI字符串也就是ASCII字符串,采用单字节编码,也可以称为Single-byte Character Sets(SBCS),为了扩展SBCS字符,Microsoft也采用了一种叫做Double-bytes Character Sets(D原创 2012-11-21 21:02:06 · 504 阅读 · 0 评论 -
UINCODE和CHAR互相转换
原文地址:和 CHAR互相转换">UINCODE 和 CHAR互相转换作者:太阳下的泪MultiByteToWideChar函数使用1.使用方法详解 在本文开始之处,先简要地说一下何为短字符和宽字符. 所谓的短字符,就是用8bit来表示的字符,典型的应用是ASCII码.而宽字符,顾名思义,就是用16bit表示的字符,典型的有UNICODE.关于windows下的ASCII转载 2013-01-22 22:07:19 · 480 阅读 · 0 评论 -
算术编码时应遵循的原则
1.尽量使用整形数据的加减法,如char、long、int、short等2.在没有硬件的支持下,尽量不采用乘法3.在没有硬件的支持下,尽量不采用浮点运算4.避免使用除法原创 2013-01-22 22:07:10 · 591 阅读 · 0 评论 -
搭建基于Notepad++的C/C++开发环境
一、安装Notepad++,以及很有用的插件NppExec、Function List等,插件下载地址在http://sourceforge.net/projects/npp-plugins/files/ 解压并打开插件,如何安装NotePad++的插件,其官网原文如下:Usually, the only installation procedure plugins require is原创 2013-01-22 22:06:14 · 796 阅读 · 0 评论 -
宏
这是一个是SkyeTek公司的M9模块中适应于不同平台的头文件,研究了两天,终于搞懂了,哈哈 #ifndef SKYETEK_PLATFORM_H#define SKYETEK_PLATFORM_H注释:这是编译器在内部运行时的一种命名机制,一般情况下,这个宏是用来防止头文件重复包含用的,以提高编译速度,如果该宏被定义过,则不执行以下语句 #define STAPI_原创 2013-01-22 22:05:31 · 270 阅读 · 0 评论 -
C/C++混合编程
作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同 ,由于C和C++对函数的处理方式是不同的.即编译方式不同,但可以用extern"C"使C++能够调用C写作的库文件,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern"C"来说明。假设某个函数的原型为: void foo( int x, int原创 2013-01-22 22:05:33 · 309 阅读 · 0 评论 -
C++源文件常用宏语句
在C++源文件中,经常见到以下代码:#ifdef _DEBUG // 判断是否定义_DEBUG #undef THIS_FILE// 取消THIS_FILE的定义 static char THIS_FILE[]=__FILE__; // 定义THIS_FILE指向文件名 #define new DEBUG_NEW //原创 2013-01-22 22:05:35 · 597 阅读 · 0 评论 -
单向链表
写了一下午代码,将运行界面贴出来犒劳自己,哈哈本程序经过测试,好像没有bug了运行界面如下:特别要提到的这个函数******************************************************** 函数名称:List_Delete** 函数功能:删除表中第k个数据** 输 入 值:链表头指针head,数据删除位置k** 返 回 值:若原创 2013-01-22 22:06:29 · 347 阅读 · 0 评论