C/C++
文章平均质量分 88
dbdoing
一名在路上的程序员
展开
-
指针的自增运算符用法
首先看看自增运算符的用法。有以下代码:int a=2;printf("%d,",++a);printf("%d",a);输出结果是3,3。修改一下:int a=2;printf("%d,",a++);printf("%d",a);结果是2,3。比较一下两段代码:第一段代码是++a,在使用a之前,先使a的值加1,再使用a。第二段代码是a++转载 2013-09-29 17:00:51 · 13087 阅读 · 4 评论 -
C++中的五大内存分区:堆、栈、自由存储区、全局/静态存储区和常量存储区
五大内存分区在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,转载 2013-09-30 14:10:48 · 1469 阅读 · 0 评论 -
static 的用法
一、 static 变量static变量大致分为三种用法1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期. 2. 用于全局变量,主要作用是限制此全局变量被其他的文件调用. 3. 用于类中的成员.表示这个成员是属于这个类但是不属于类中任意特定对象1. 静态局部变量静态局部变量属于静态存储方式,它具有以下特点:(1)静态转载 2013-09-30 14:13:49 · 736 阅读 · 0 评论 -
如何使用const
C中CONST的使用:const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。 问题:const变量 & 常转载 2013-09-30 14:15:48 · 728 阅读 · 0 评论 -
C语言中getch、getche、fgetc、getc、getchar、fgets、gets之间的区别
首先,这两个函数不是C标准库中的函数,int getch(void) //从标准输入读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符。也就是,不带回显。int getche(void) //从标准输入读入一个字符,键盘输入的时候,屏幕显示所输入的字符。带回显。这两个函数包含在头文件conio.h中,需要记住的是conio.h不是C标准库中的头文件。Micorso转载 2013-09-30 14:46:47 · 1667 阅读 · 0 评论 -
数组指针、指针数组、函数指针的用法
一 :关于指针和堆的内存分配 先来介绍一下指针 : 指针一种类型,理论上来说它包含其他变量的地址,因此有的书上也叫它:地址变量。既然指针是一个类型,是类型就有大小,在达内的服务器上或者普通的PC机上,都是4个字节大小,里边只是存储了一个变量的地址而已。不管什么类型的指针,char * ,int * ,int (*) ,string * ,float * ,都是说明了本指针所指向的地址空间是什么转载 2013-09-30 14:02:22 · 1186 阅读 · 0 评论 -
C++ 中 static 变量的使用
最近的一个程序中需要构建两个不同的类,他们继承与同一个父类,并且这两个子类有共同的"全局变量"变量,且这些"全局变量"只需要初始化一次。因此就需要在父类中定义static ,当然大多数变量都是string bool等简单的变量。class1.h#ifndef _CLASS1_H__#define _CLASS1_H__#include using namespace std转载 2013-09-16 15:17:42 · 988 阅读 · 0 评论 -
C++中回调函数(CallBack)的使用
如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数却-有不同的数据成员。由于this指针的作用,使得将一个CALL-BACK型的成员函数作为回调函数安装时就会转载 2013-09-17 12:54:57 · 15673 阅读 · 1 评论 -
类的成员函数和全局函数的互相调用
1.如果要在全局函数中调用某个类中的成员函数,那么该类的成员函数需要声明为静态的。因为,普通的类的成员函数通常由该类的对象实例来调用,外部没有途径来访问到它;而声明为静态的,外部则可以通过类名和范围限定符来访问它。类的静态成员函数的特点是只能访问该类的静态成员,并且不能操作this指针。2.在类的成员函数中可以直接调用全局函数,不需要任何特殊的指定,比如通过this指针。转载 2013-09-17 15:35:19 · 6830 阅读 · 1 评论 -
C++中内部函数(静态函数)和外部函数的用法
函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数只能被本文件调用,而不能被其他文件调用。根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。一、内部函数如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static。函数首部的一般格式为 static 类型标识符 函数名(形参表)如 s转载 2013-09-17 12:41:09 · 6170 阅读 · 0 评论 -
C/C++语言void及void指针深层探索
C/C++语言void及void指针深层探索作者:宋宝华 C++学习资源网 转载 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义 void的字面意思是转载 2013-09-18 11:00:10 · 1034 阅读 · 0 评论 -
c++中static的使用
C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联!这句话可能比较拗口,其实可以这么理解:每个static数据成员可以看成是类的一个对象,而不与该类定义的对象有任何关系!下面我们就来具体转载 2013-10-08 09:12:08 · 677 阅读 · 0 评论 -
回调函数的作用 --callback
一直不太理解回调函数的作用,下面是找到的一些关于回调函数的作用的解答。1.回调函数是一个很有用,也很重要的概念。当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数。2.回调函数就相当于一个中断处理函数,由系统在符合你设定的条件时自动调用。为此,你需要做三件事:1,声明;2,定义;3,设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于系统转载 2013-09-17 13:45:02 · 3773 阅读 · 0 评论 -
回调函数的作用
回调函数的作用 自己的理解有以下几点:1.回调函数就是由客户自己作主的函数。比如,OnTimer()定时器的回调函数,时间到了,需要做什么,交给客户端自己处理,想添加任何功能都行。回调函数给了客户端自由。2. 回调函数很有可能是输出的一种方式。对于DLL来说,函数的参数有输入参数[in],输出参数[out],回调函数的指针,作为其中的参数,可以起到输入的作用,也可以起到输出转载 2013-09-17 13:50:33 · 2692 阅读 · 1 评论 -
如何动态分配数组
变长一维数组这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做:#includeusing namespace std;int main(){int len;cin>>len;//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间int *p=new in转载 2013-09-26 13:03:57 · 1517 阅读 · 0 评论 -
getchar()用法
1.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)getchar()使用不方便,解决方法: (1)使用下面的语句清除回车:while(getchar()!='\n'); (2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件2.getchar()是stdio.h中的库函数,它的作用是从s转载 2013-09-25 16:53:15 · 9157 阅读 · 0 评论 -
EOF
我学习C语言的时候,遇到的一个问题就是EOF。它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。 int c; while ((c = fgetc(fp)) != EOF) { putcha转载 2013-09-26 09:15:06 · 862 阅读 · 0 评论 -
野指针
概念:“野指针”不是NULL 指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if 语句很容易判断。但是“野指针”是很危险的,if 语句对它不起作用。“野指针”的成因主要有两种:(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL 指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向转载 2013-09-27 10:31:15 · 701 阅读 · 0 评论 -
malloc、free与new、delete
【1】malloc与free 和 new与delete(1)malloc与free是C++/C语言的标准库函数。new/delete是C++的运算符。它们都可以申请动态内存和释放内存。(2)对于非内部数据类型的对象而言,用malloc/free无法满足动态对象的要求(对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数)。(3)由于malloc/free是库函数而不是转载 2013-09-27 10:10:03 · 959 阅读 · 0 评论 -
对new和delete的理解,灵活使用
我记得当年学习C++基础的时候,老师曾经告诉我们:一般来说new和delete要成对出现,在使用完new申请的内存后要马上释放。我相信持这种说法的人不止我们老师一个人,养成良好的内存使用习惯固然重要,但如果因此就认为new和delete必须成对出现,使用完new得到的空间后就要马上用delete释放的话,就有点“大材小用”了,相信C++提供这一由用户控制的内存控制方法也不是只限于如此的使用方法。转载 2013-09-27 09:34:00 · 821 阅读 · 0 评论 -
C++中运算符的重载
什么是运算符的重载? 运算符与类结合,产生新的含义。 为什么要引入运算符重载? 作用:为了实现类的多态性(多态是指一个函数名有多种含义)怎么实现运算符的重载?方式:类的成员函数 或 友元函数(类外的普通函数)规则:不能重载的运算符有 . 和 .* 和 ?: 和 :: 和 sizeof友元函数和成员函数的使用场合:一般情况下,建议一元运转载 2013-09-27 15:16:24 · 1606 阅读 · 0 评论 -
C中 字符数组和字符串以及strlen 和sizeof
字符数组和字符串一、字符数组和字符串的重定义字符数组就是字符串吗?有人说是,因为书上这么写,教师也这么教的。小雅不敢说书上或教师们错了,但至少可以说许多初学者都混淆了这两个概念。因此,在这此将这2个概念再明确一下。字符数组,完整地说叫字符类型的数组。字符数组不一定是字符串。字符串是最后一个字符为NULL字符的字符数组。字符串一定是字符数组。字符数组的长度是固定的,其中的转载 2013-10-14 15:47:18 · 2362 阅读 · 0 评论 -
C中是否有string,C++呢?
也许是对C语言撞我的不熟练,也许是集中语言搞混淆了,知道java中有Sting类,也感觉C中也会有string类型,其实不然。一直以来对这个问题都不是很清楚:只是知道C语言里有这个头文件,所以就想当然的认为C语言里有string这个 类型,可以通过下面这种形式来声明string的变量 string aString; 后来编程时发现通不过编译,又查资料才知道原来C语言里压根就没有string转载 2013-10-14 14:10:29 · 2206 阅读 · 0 评论 -
struct用法深入探索
struct用法深入探索 1. struct的巨大作用 面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C++程序,势必要涉及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。从某种程度上来说,会不会用struct,怎样用struct是区别一个开发人员是否具备丰富开发经历的转载 2013-10-28 13:51:42 · 741 阅读 · 0 评论 -
结构数组与对象数组
在C语言中,把具有相同结构类型的结构变量,有序地集合起来便组成了结构数组.在C++中,与此类似将具有相同class类型的对象有序地集合在一起便组成了对象数组,对于一维对象数组也称为"对象向量",因此对象数组的每个元素都是同种class类型的对象. 《C语言开发技术详解》第13章结构、联合和枚举,在C语言中,数据类型可分为基本数据类型和构造数据类型。构造类型中的数组已在第9章中介绍了。转载 2013-10-28 14:49:03 · 2792 阅读 · 0 评论 -
PIMPL IDIOM
“One popular technique is called the Pimpl idiom. This involves isolating all of a class’s private data members inside of a separate implementation class or struct in the .cpp file. The .h file then转载 2013-11-07 12:48:49 · 816 阅读 · 0 评论 -
char * /const char */unsigned char * 转换
-----------------------------------------------------------------------------------BYTE bArray[16]; CHAR *cArray[17] ; //BYTE 转 Char * _tcscpy( cArray , (CHAR *)bArray); --------------------转载 2013-11-11 16:52:07 · 12525 阅读 · 0 评论 -
tchar ANSI编码 Unicode编码
因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数为了存储这样转载 2013-11-11 17:17:58 · 1368 阅读 · 0 评论 -
RAII惯用法:C++资源管理的利器
RAII惯用法:C++资源管理的利器RAII是指C++语言中的一个惯用法(idiom),它是“ResourceAcquisition Is Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,RAII早已在C++社群中深入人心。我记得第一次学到RAII惯用法是转载 2013-11-26 16:23:09 · 717 阅读 · 0 评论 -
RAII:在类的构造函数中分配资源,在析构函数中释放资源
RAII介绍及实例分析: 动物都会摄取食物,吸收其中的营养,用于自身生长和活动。然而,并非食物中所有的物质都能为动物所吸收。那些无法消化的物质,通过消化道的另一头(某些动物消化道只有一头)排出体外。不过,一种动物无法消化的排泄物,是另一种动物(生物)的食物,后者可以从中摄取所需的营养。 一门编程语言,对于程序员而言,如同食物那样,包含着所需的养分。当然也包含着无法消化的东西。不同的转载 2013-11-26 16:39:04 · 2326 阅读 · 0 评论 -
C++中常量类型 const 详解
C++中常量类型 const 详解===============================================================1、什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:) 2、为什么引入const? const 推出的初始目的,正是为了取代预转载 2013-11-12 14:38:53 · 1459 阅读 · 0 评论 -
Const用法
Const的使用,认为可有可无,如果你开发的是一个简单的系统,如果你一个人就能记住所有变量的意义,如果你一个人就能控制所有变量的使用位置,如果你的软件发布后不需要更多的维护工作,那么你可以忘记const,否则,const就是一个多个程序员之间沟通的强大工具。 首先,const的最基本用法就是标识常量,使编译器能够检测出对该变量的不正确使用,也可以使其他的程序员使用此常量时,注意不能改变此常转载 2013-11-12 14:53:49 · 891 阅读 · 0 评论 -
C++中创建持久对象的方法
持久对象(persistent objects)广泛应用于游戏、分布式数据库系统、多媒体以及图形应用程序中。目前C++并不直接支持持久性(persistence)(但有一些在C++未来版本中添加持久性和反射(reflection)的建议)。持久对象可以在创建它的程序的作用域之外保持自身状态。把对象写入一个文件并在以后重建之,或者把对象传送到一台远程机器,就是这样的例子。对持久性的支持并不象第一眼看转载 2013-11-28 14:15:58 · 766 阅读 · 0 评论 -
C++中对象的动态创建与释放
前面介绍的方法定义的对象是静态的,在程序运行过程中,对象所占的空间是不能随时释放的。但有时人们希望在需要用到对象时才建立对象,在不需要用该对象时就撤销它,释放它所占的内存空间以供别的数据使用。这样可提高内存空间的利用率。在前边介绍了用new运算符动态地分配内存,用delete运算符释放这些内存空间。这也适用于对象,可以用new运算符动态建立对象,用delete运算符撤销对象。如果已转载 2013-11-28 14:08:48 · 1964 阅读 · 0 评论 -
C++中float和double
简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字(见我的double_float文件) 还有,有个例子:在C和C++中,如下赋值语句float a=0.1;编译器报错:war转载 2013-11-15 09:42:26 · 7445 阅读 · 1 评论 -
C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
首先回顾一下C++类型转换:C++类型转换分为:隐式类型转换和显式类型转换第1部分. 隐式类型转换又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 int ival = 3;double dval = 3.14159;转载 2013-11-29 11:17:48 · 20265 阅读 · 2 评论 -
三种继承的方法:public 继承/private继承/protected继承详解及区别
(1)子类对父类成员的访问权限跟如何继承没有任何关系,“子类可以访问父类的public和protected成员,不可以访问父类的private成员”——这句话对任何一种继承都是成立的。(2)继承修饰符影响着谁可以知道“继承”这件事。public继承大家都知道,有点像“法定继承人”,因此,任何代码都可以把子类的引用(或指针)直接转换为父类。也因为这个原因,public继承常用来表达设计中所谓的“转载 2013-11-29 16:10:57 · 25965 阅读 · 2 评论 -
动态数组
1.变长一维数组 这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做: //文件名: array01.cpp #include using namespace std; int main()转载 2013-12-09 21:22:51 · 893 阅读 · 0 评论 -
C++中如何定义动态数组
首先:为什么需要动态定义数组呢? 这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出 但是问题是,c++要求定义数组时,必须明确给定数组的大小,要不然编译通不过 如: int Array[5];正确 int i=5; int Array[i]; 错误 因为在编译阶段,编译器并不知道 i 的值是转载 2013-12-09 21:27:24 · 36206 阅读 · 2 评论 -
C++中各种对象的生命周期
作用域由{}定义,可以用构造函数和析构函数来追踪对象的生命周期,比较简单,不述。全局对象在main开始前被创建,main退出后被销毁。静态对象在第一次进行作用域时被创建,在main退出后被销毁(若程序不进入其作用域,则不会被创建)。局部对象在进入作用域时被创建,在退出作用域时被销毁。new创建的对象会一直存在,即使指向该对象的指针已被销毁,容易造成内存泄漏。转载 2013-12-10 23:23:56 · 12170 阅读 · 0 评论