【01】C/C++
文章平均质量分 74
_小青年儿_
优秀是一种习惯
展开
-
在阅读源代码或设计文档时,看到惊艳的技巧
提两个C语言里实现列表用到的技巧。会用的人可能会觉得很平常,但是第一次看到的时候还是觉得很厉害的:两级指针:两级指针要怎么用呢?我们先来看一下大部分正常人实现列表的方法://定义链表节点structstruct node { data_type data; struct node *next, *prev;}*head = NULL;//然后插入一个节点就要这样:原创 2015-04-13 21:39:16 · 987 阅读 · 0 评论 -
Linux C 经典题目总结
原文:http://blog.csdn.net/xuexingyang/article/details/7434027更新至: 2012-04-05Author : Boatman Yang 【第一部分 C基本概念】【几个关键字】1)、auto关键字: 声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变原创 2012-04-15 11:27:10 · 1305 阅读 · 0 评论 -
私有构造函数 私有析构函数
很多情况下要求当前的程序中只有一个object。例如一个程序只有一个和数据库的连接,只有一个鼠标的object。通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?这意味着什么? 当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私原创 2012-04-12 19:57:22 · 868 阅读 · 0 评论 -
delete this的使用
In order to understand "delete this" :First Step------dive into "delete p"delete p 执行了哪两个步骤?delete p 是一个两步的过程:调用析构函数,然后释放内存。delete p产生的代码看上去是这样的(假设是Fred*类型的):// 原始码:delete p;if (p != N原创 2012-04-07 20:12:27 · 3572 阅读 · 2 评论 -
STL_MAP容器常用操作
1.map的功能自动建立Key - value的对应。key 和 value可以是任意你需要的类型。根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。快速插入Key - Value 记录。快速删除记录根据Key 修改value记录。遍历所有记录。2.使用map原创 2012-04-07 14:21:23 · 1093 阅读 · 0 评论 -
C++的自赋值问题
再用到操作符重载的时候,注意到了这个问题如果不进行自我赋值检查。就有可能出现一种情况。那是灾难性的。举例说。你在拆房子。如果你不先看看自己是否在房子里就直接拆了。那会是怎么样呢??想想就知道。在网上搜索了一下,转载一个现成的:http://www.lough.com.cn/cpp/thincpp2.htm1.需要考虑的自赋值。当类包含指针或引用成员时应注意检查。原创 2012-03-13 18:59:50 · 4607 阅读 · 0 评论 -
四种强制转换类型运算符
static_cast 用法:static_cast ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或原创 2012-03-13 19:02:25 · 1078 阅读 · 0 评论 -
【集锦】C++扫盲
扫盲1:*****************************************************************************扫盲2:简而言之c++一个空类,c++会隐式声明如下成员函数:class Empty { public: Empty(); Empty(const Empty&); ~Empty();原创 2011-11-11 16:25:12 · 752 阅读 · 0 评论 -
C++编译错误及解决办法
编译错误一:XX does not name a type 编译错误二:field `XX' has incomplete type 编译错误一:XX does not name a type, 中文意思为“XX没有命名一个类型“拿个例子来讲,如果两个类定义如下:class B{public:B(){}~B(){}private:A a;};原创 2012-03-24 17:07:14 · 2133 阅读 · 0 评论 -
使用句柄类封装继承体系
在DLL封装的时候,一般都会采用接口类(Interface Class),即纯虚类,达到接口与实现分离的目的。但采用接口类,只能通过返回指针或引用来间接使用被封装的类。相对于这一点,采用句柄类(Handle Class)是个不错的替代方案。句柄类除了名称外,在使用方式上基本同被封装的类无差别。句柄类易用性是建立在耗费一定运行效率的基础之上的(当然,接口类也会消耗一定的运行效率),因此它一般用在运行原创 2012-03-13 10:47:03 · 1070 阅读 · 0 评论 -
switch-case陷阱
switch( flag ) { case 0: int var = 1; break; case 2: int var2 = 2; break; default: break; }像上面这样的代码就会报错error C2360: initialization of 'var' is skipped by 'case' labelerror C23原创 2011-08-24 12:59:30 · 5513 阅读 · 1 评论 -
malloc(0)
man mallocmalloc() allocates size bytes and returns a pointer to the allocated memory. The memory is not cleared. If size is 0, then malloc() returns either NULL, or a uniqu原创 2011-11-12 10:58:40 · 824 阅读 · 0 评论 -
typedef
用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:原创 2011-12-01 10:52:37 · 678 阅读 · 0 评论 -
成员函数的重载、覆盖与隐藏
林锐博士的《高质量C++/C编程指南中对“成员函数的重载、覆盖、隐藏 ”分析设计到一些本质的东西,可能因为博士处一个比较高的位置,对一些问题看来是理所当然,所以其解释可能过于简单,对初学者可能不是十分好理解。 下面,我就这三个规则提出一些个人的看法,理解。这个三规则的顺序我认为应该改为“重载、隐藏、覆盖”来讲,可能思路会清晰一些。 重载的特征: 1、处在相同的空间中,即相同的原创 2011-11-10 16:07:37 · 736 阅读 · 0 评论 -
private的虚函数
我们把一个仅仅含有纯虚函数的类称为接口,我们也好像已经习惯了将这个接口中的所有纯虚函数全声明为public,而且按照这样的设计,一切都工作得不错。比如COM正是这样做的,它的接口中几乎不会存在private的纯虚函数。那么,让我们想一想,纯虚函数或者虚函数可以为private吗?如果这种方式是可行的,那么什么时候可以将(纯)虚函数设为private了?这些都是本文将要讨论的主题。一起来看看。原创 2012-05-14 15:13:30 · 1452 阅读 · 0 评论 -
回调函数
回调函数调用关系图对于第一种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数。对于第二种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数。主程序不知道宿主函数什么时候调用回调函数,因为调用函数启动了线程,这样,主程序就不必关心宿主函数什么时候调用回调函数了,主程序可以释放出来做自己的事了。精妙比原创 2012-05-16 15:11:22 · 985 阅读 · 0 评论 -
undefined reference to `pthread_create'的错误。
晚上编译一个工程,TMD编译时总是报thread.o: In function `create_thread':thread.c:(.text+0x1ef): undefined reference to `pthread_create'collect2: ld returned 1 exit statusmake: *** [serverd] Error 1的错误,可是makefi原创 2015-08-19 21:19:29 · 1126 阅读 · 0 评论 -
利用二级指针删除单向链表
Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level coding。下面是Linus的教学原文及翻译——“At the opposite end of the spectrum, I actually wish more people und原创 2015-06-25 17:47:18 · 651 阅读 · 0 评论 -
libevent源码分析
1、入门1.1、概述Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点: (1)事件驱动(event-driven),高性能;(2)轻量级,专注于网络,不如 ACE 那么臃肿庞大; (3)源代码相当精炼、易读; (4)跨平台,支持 Windows、Linux、*BSD和 Mac Os;原创 2015-03-30 21:22:08 · 719 阅读 · 0 评论 -
socketpair
一.概念及用途一个问题:如何创建全双工管道?直接的办法当然是pipe两次,创建两组管道,但是有没有更简单的呢?socketpair就可以了,man socketpair:socketpair - create a pair of connected sockets, The two sockets are indistinguishable,也就是说,用socketpair创建原创 2015-01-02 12:06:02 · 990 阅读 · 0 评论 -
提取.c文件中的函数名
搜索.c/.cpp/.h文件中函数名的解决方案 案例:在一个.c文件有很多函数 #include ....... #define.......... //.......... /* .........................*/ /* .....................原创 2014-03-06 22:52:52 · 7212 阅读 · 0 评论 -
C语言输出“I LOVE U”
#include #include #define N 50 HANDLE hConsole; void gotoxy(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(hConsole, coord); } void main(原创 2013-10-08 21:28:24 · 3997 阅读 · 0 评论 -
结构体字节对齐
先看一段代码#include #include //package size defaults to 8struct E{ int i; // size 4 short j; // size 2 double k; // size 8 }; #pragma pack(4) struct F { int原创 2013-06-24 21:54:49 · 1272 阅读 · 1 评论 -
gdbm编程示例
我在ubuntu是需要先安装GDBM的。总结一下GDBM的特点:按key-value存储数据,value是可变长的。它只对key进行索引,只能按key进行查询。高效的查询,低效的插入,适合于存储比较静态的数据。GDBM可以很容易地编译进一个可发布的二进制文件中,不需要独立地安装数据库服务器。不支持SQL,不支持表之间创建关系,更不用说存储过程、触发器什么的了。操作GDBM就原创 2013-03-16 21:16:14 · 1274 阅读 · 0 评论 -
Epoll介绍和程序实例
Linux Epoll介绍和程序实例1. Epoll 是何方神圣?Epoll 可是当前在 Linux 下开发大规模并发网络程序的热门人选, Epoll 在 Linux2.6 内核中正式引入,和 select相似,其实都 I/O 多路复用技术而已 ,并没有什么神秘的。其实在 Linux 下设计并发网络程序,向来不缺少方法,比如典型的 Apache 模型( Process Per Conn原创 2013-03-16 19:33:51 · 979 阅读 · 0 评论 -
#pragma
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。一般格式 其格式一般为: #pragma Para。其中Para 为参数,下面原创 2012-11-24 19:16:39 · 898 阅读 · 0 评论 -
回调机制
过程语言中的回调(C)函数指针回调在C语言中是通过函数指针来实现的,通过将回调函数的地址传给被调函数从而实现回调。因此,要实现回调,必须首先定义函数指针,请看下面的例子:void Func(char *s);// 函数原型void (*pFunc) (char *);//函数指针可以看出,函数的定义和函数指针的定义非常类似。一般的化,为了简化函数指针类型原创 2012-10-16 19:58:33 · 790 阅读 · 0 评论 -
typeid
在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和typeid。 dynam原创 2012-05-25 15:54:18 · 712 阅读 · 0 评论 -
指针参数是如何传递内存的
7.4 指针参数是如何传递内存的?如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1 中,Test 函数的语句GetMemory(str, 200)并没有使str 获得期望的内存,str 依旧是NULL,为什么?void GetMemory(char *p, int num){p = (char *)malloc(sizeof(char) * num)原创 2011-11-10 13:56:25 · 743 阅读 · 0 评论 -
定义一个含10个函数指针的数组,指向的函数带一个整形参数
void (*func_array[10])(int);原创 2011-11-18 16:50:53 · 1769 阅读 · 0 评论 -
条款7:预先准备好内存不够的情况
条款7:预先准备好内存不够的情况operator new在无法完成内存分配请求时会抛出异常(以前的做法一般是返回0,一些旧一点的编译器还这么做。你愿意的话也可以把你的编译器设置成这样。关于这个话题我将推迟到本条款的结尾处讨论)。大家都知道,处理内存不够所产生的异常真可以算得上是个道德上的行为,但实际做起来又会象刀架在脖子上那样痛苦。所以,你有时会不去管它,也许一直没去管它。但你心里一定还是原创 2011-10-24 10:50:30 · 947 阅读 · 0 评论 -
理解extern "C"
关于extern “C”的来龙去脉,摘录的三篇网友文章,如下:http://www.yuanma.org/data/2006/0830/article_1438.htm1、 引言C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持原创 2011-04-28 17:13:00 · 916 阅读 · 0 评论 -
COM组件
<br /><br /><br />目录简介技术内幕COM与C++区别COM+特性COM是个开放的组件标准COM组件类型<br /> <br /><br />简介<br /> <br /> 什么是COM组件<br />COM是Component Object Model (组件对象模型)的缩写。 <br />用户需要什么样的软件产品?这是一个多选题,但高效,健壮是肯定会被选中的。作为一名软件开发人员如何做才能满足用户的需要呢?必须要保证升级应用时不破坏与以前版本的向后兼容性。必须做到扩展系统服务时不依赖特原创 2011-04-28 10:28:00 · 968 阅读 · 0 评论 -
表驱动
函数指针(1)函数指针含义函数 在C语言中,函数作为功能完成的基本单位,它的定义如下: FunctionType FuncName(ArgumentList…){ FunctionBody…} 函数指针 函数作为功能的执行实体,它也占用一段存储空间,我们可以通过这段空间的起始地址来访问函数;如函数在编译形成目标代码时被分配一个入口地址(第一条指令的地址),这个地址是函数执行的入口地址。(如0x82345678) 有时我们需要访问这个地址,直接访问地址的方式(0x82345678)不是很方便。虽然通过函数的原创 2011-04-27 16:06:00 · 2370 阅读 · 1 评论 -
判断当天日历是星期几
//如何判断当天日历是星期几#include #include int main (){ time_t rawtime; struct tm * timeinfo; int year, month ,day; char * weekday[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Fri原创 2011-04-15 15:39:00 · 2022 阅读 · 0 评论 -
LRC 歌词同步
LRC 歌词同步 一、准备工作 既然要制作歌词同步程序,首先要准备一首歌,我们就以“周杰伦-青花瓷”为例。首先要下载这首“青花瓷.mp3”,保存为“C:/My Player/Music/青花瓷.mp3”。还要下载青花瓷的 LRC 文件,大家可以到网上下载(地址见附录),将文本内容保存为“C:/My Player/LRC/青花瓷.lrc”。我们的程序(类和FLA)则保存在“C:/My Player/”文件夹下。青花瓷.lrc 文件:[ti:青花瓷][ar:周杰伦][al:我很忙][by:张琪][00:00原创 2011-04-15 15:51:00 · 2262 阅读 · 0 评论 -
C中字符串处理函数
C语言中字符串的处理函数大全对于刚接触C 语言的人们,字符串往往处理起来有点费力,我是很有感触的,刚开始用来做用户名和密码的时候调试了很久才出来,呵呵,再此我收集了C 语言中关于字符串的函数,希望对大家能有帮助,中国IEEE 希望大家能共同进步!~1.函数名: stpcpy 功能: 拷贝一个字符串到另一个用 法: char *stpcpy(char *destin, char *source);程序例:#include #include int main(void){char string[10];char原创 2011-04-12 10:23:00 · 1426 阅读 · 0 评论 -
char, BSTR, _bstr_t, CComBSTR之间的互相转换
char, BSTR, _bstr_t, CComBSTR之间的互相转换char: To BSTR: _com_util::ConvertStringToBSTR CString的AllocSystemString To _bstr_t: _bstr_t的构造函数 To CComBSTR: CComBSTR的构造函数BSTR: To char: _com_util::ConvertBSTRToString原创 2011-04-02 15:40:00 · 3462 阅读 · 3 评论 -
文件操作
最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起。之前本打算这个模块就结束了,文件操作就不写了,但是文件操作又是一个很重要的东西,而且也刚好能够总结之前我们学习的所有知识。同时也为了将文件操作这个初学者认为很神秘的东西给本质化。因此,本篇将逐一介绍C语言的文件操作。(本模块的命名本来是想C/C++一块儿讲解的,但是由于工作、毕业论文、业余时间的充电、还有要完成那个未知的梦等,因此因为时间问题C++就只能放在以后有机会再写了,因此本篇将是本模块的最后一篇,之后将不会再连载了,请大家谅解。)好了原创 2011-04-01 17:00:00 · 1074 阅读 · 1 评论 -
BSTR详解
<br />BSTR详解一 - BSTR简介和内部结构<br />1 Why need BSTR<br />COM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。<br />· C++ 字符串是以0结束的ASCII或Unicode字符数组<br />· Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。<br />·原创 2011-03-30 18:31:00 · 1617 阅读 · 0 评论