C++
文章平均质量分 61
一苇渡江694
无有功德,一苇渡江
展开
-
C/C++语言字符串操作总结大全(超详细)
字符串操作strcpy(p, p1) 复制字符串strncpy(p, p1, n) 复制指定长度字符串strcat(p, p1) 附加字符串strncat(p, p1, n) 附加指定长度字符串strlen(p) 取字符串长度strcmp(p, p1) 比较字符串strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定转载 2015-06-23 21:43:17 · 2698 阅读 · 3 评论 -
C++数组和函数中的指针
一、指针与数组1、数组:数组是一段连续的空间,数组名表示空间第一个元素的地址。2、指针:指针包含两个内容,一个是内存地址,这个大小和机器长度有关;另一个是指针类型,这个跟指针定义的类型有关。int arr[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };int (*p1)[3] = arr;int (*p2)[2][3] = &原创 2015-08-25 15:16:04 · 2270 阅读 · 2 评论 -
排序方法的比较
首先给出各个排序方式的性能比较:排序方法的比较类别排序方法时间复杂度空间复杂度稳定性平均情况最好情况最坏情况辅助存储插入排序直接插入O(n2)O(n)O(n2)O(1)转载 2015-07-31 14:08:51 · 3007 阅读 · 1 评论 -
串口之WaitForSingleObjec、WaitForMultipleObjects函数详解
WaitForSingleObject 函数等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。DWORD WaitForSingleObject(HANDLE hObject, DWORD dwMilliseconds);第一个参数hObject标识一个能够支持被通知/未通知的内核对象(前面列出的任何一种原创 2015-08-18 10:23:38 · 4323 阅读 · 0 评论 -
串口之GetCommState、SetCommState函数详解
GetCommState 读取串口设置(波特率,校验,停止位,数据位等).函数声明:BOOL GetCommState(HANDLE hFile,LPDCB lpDCB);GetCommState函数的第一个参数hFile是由CreateFile函数返回指向已打开串行口的句柄。第二个参数指向设备控制块DCB。如果函数调用成功,则返回值为非0;若函数调原创 2015-08-18 09:23:31 · 16374 阅读 · 0 评论 -
浅析C++中的简单变量--整型
C++ Primer Plus中说:OOP的本质就是设计并扩展自己的数据类型。但是在创建自己的数据类型之前,需要先了解一下内置的类型。 内置的C++类型分为:基本类型和复合类型。而基本类型又分整数和浮点数。本文只介绍一下整型。 先了解几个基本概念: 位(bit):计算机内存的基本单元,即0或是1。例如,8位的内存可以有256种不同的组合,即可以表示0-255或是-128到127. 字节(by原创 2015-08-31 08:29:51 · 5158 阅读 · 1 评论 -
浅析C++中sizeof操作符的用法
1. 概要 sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义.这是一个依赖于编译系统的值,一般定义为typedef unsigned int size_t;编译器林林总总,但作为一个规范,都会保证char、signed char和unsigned char的sizeof值为1,毕竟ch原创 2015-08-31 11:27:15 · 4355 阅读 · 3 评论 -
Hey,别搞错了Win32项目和Win32控制台程序
你是否和我一样呢,写了很多控制台程序,特别熟悉cout、main函数等等。 但是你同样也听说过win32 api !!当在你的控制台应用程序中写下某个api函数的时候,你也许会窃喜api函数带来的方便。但是当你编译代码的时候,编译器会无情的通知你“不能识别XX标识符”。 所以,从现在开始我的blog.你兴致勃勃的打开vs2010,选择“文件”-》“新建”-》“项目”,你会看到如下: 正如你原创 2015-09-01 14:55:36 · 16770 阅读 · 3 评论 -
串口之COMMTIMEOUTS结构体详解
COMMTIMEOUTS主要用于串口超时参数设置。COMMTIMEOUTS结构如下: typedef struct _COMMTIMEOUTS { DWORD ReadIntervalTimeout; DWORD ReadTotalTimeoutMultiplier; DWORD ReadTotalTimeoutConstant; DWORD WriteTotalTimeo原创 2015-08-18 09:14:46 · 17767 阅读 · 0 评论 -
串口之OVERLAPPED结构体详解
typedef struct _OVERLAPPED { DWORD Internal; DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; HANDLE hEvent; } OVERLAPPEDInternal: 预留给操作系统使用。它指定一个独立于系统的状态,当GetOverlappedResul原创 2015-08-18 09:18:41 · 9339 阅读 · 0 评论 -
串口之SetUpComm、PurgeComm函数详解
SetupComm该函数初始化一个指定的通信设备的通信参数。BOOL SetupComm(HANDLE hFile,DWORD dwInQueue,DWORD dwOutQueue);参数hFile[IN]通讯设备句柄。CreateFile函数返回此句柄。dwInQueue[in]指定推荐的大小,以字节原创 2015-08-18 09:35:17 · 29971 阅读 · 0 评论 -
串口之CreateFile 函数详解
HANDLE CreateFile(LPCTSTR lpFileName, //指向文件名的指针DWORD dwDesiredAccess, //访问模式(写/读)DWORD dwShareMode, //共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针DWORD dwCreationDi原创 2015-08-18 08:40:03 · 23693 阅读 · 0 评论 -
串口之GetCommTimeouts、SetCommTimeouts函数详解
Windows系统利用此函数获取特定的通讯设备读写时的超时参数设定,GetCommTimeouts函数声明如下:BOOL GetCommTimeouts(HANDLE hFile,LPCOMMTIMEOUTS lpCommTimeouts);GetCommTimeouts函数的第一个参数hFile是由CreateFile函数返回指向已打开串行口的句柄。第二个原创 2015-08-18 09:28:49 · 10796 阅读 · 0 评论 -
VC++串口通信基础知识
在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件(ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)),这种方法程序简单,但欠灵活。其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。 本文我们只介绍API串口通信部分。 串口的操作可以有两种操作方式:同原创 2015-08-18 10:26:34 · 2724 阅读 · 2 评论 -
浅谈MFC中BitBlt与StretchDIBits的区别
一、基础知识1.BitBlt BitBlt 用于从原设备中复制位图到目标设备,语法格式如下: BOOL BitBlt( HDC hdcDest, // handle to destination DC int nXDest, // 目标矩形区域的左上角x轴坐标点。 int nYDest, // 目标矩形区域的左上角y轴坐标点。 int nWidth, // 在目标设备中绘制位图的宽度。原创 2015-08-06 13:14:08 · 7877 阅读 · 1 评论 -
串口之DCB结构体详解
DCB结构详细说明: typedef struct _DCB { DWORD DCBlength; DWORD BaudRate; DWORD fBinary: 1; DWORD fParity: 1; DWORD fOutxCtsFlow:1; DWORD fOutxDsrFlow:1; DWORD fDtrControl:2; DWORD原创 2015-08-18 09:03:57 · 22861 阅读 · 1 评论 -
浅谈C++--绝不在构造和析构函数中调用virtual函数
C++规定了虚函数的行为,但将实现方法留给了编译器作者。编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针,这种数组成为虚函数表。这篇博客我们不是试图详细说明虚函数的工作原理。但是我们也应该知道,使用虚函数,在内存和执行速度方面有一定的成本: 每个对象都将增大、增大量为存储地址的空间; 对于每个类,编译器都创建一个虚函数地址表; 对于每个函数调用,原创 2015-09-09 08:58:06 · 10610 阅读 · 2 评论 -
To new is C++; To malloc is C; To mix them is sin (混淆C++中的new和C中的malloc是一种犯罪)
Introduction One of the most common questions that get asked during interviews for C++ programmers is to explain the differences between using malloc and using new. It’s also a fairly common question翻译 2015-08-19 10:15:07 · 1438 阅读 · 0 评论 -
浅析C++中的智能指针
《More Effective C++》条款28中这样写道: 所谓smart pointers,是“看起来、用起来、感觉起来都像内建指针,但提供更多机能”的一种对象。 智能指针是行为类似于指针的类的对象。为什么需要智能指针呢? 首先看如下代码:void remodel(std::string & str){ std::string *ps = new std::string(str)原创 2015-09-10 08:33:42 · 3701 阅读 · 1 评论 -
线程中CreateEvent和SetEvent和ReSetEvent及WaitForSingleObject的用法
概述 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. CreateEvent:创建或打开一个命名的或无名的事件对象. EVENT有两种状态:发信号,不发信号。 SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。 WaitForSingleObject()等待,直到参数所指定的OBJECT成为原创 2015-08-18 14:08:03 · 15565 阅读 · 0 评论 -
线程临界区相关结构体和函数
单进程的线程可以使用临界资源对象来解决同步互斥问题,该对象不能保证哪个线程能够获得到临界资源对象,因而该系统能公平的对待每一个线程。 每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。原创 2015-08-19 09:37:59 · 3128 阅读 · 0 评论 -
你所不知道的事儿--#ifndef #endif不能防止编译器将文件包含两次
我们知道,在一个文件中只能将同一个头文件包含一次。记住这个规则很容易,但是很可能在不知情的情况下将头文件包含多次。 因此, 在定义头文件的时候,我们常常这样写:#ifndef A_H_#define A_H_...#endif编译器首次遇到该文件时,名称A_H_没有定义,这种情况下编译器将查看#ifndef和#endif之间的内容。如果在同一个文件中遇到其他包含a.h的代码时,编译器将知道原创 2015-09-09 08:54:56 · 2375 阅读 · 2 评论 -
C++ Copy Constructor in depth (深入理解C++拷贝构造函数)
The copy constructor is a special kind of constructor which creates a new object which is a copy of an existing one, and does it efficiently. (拷贝构造函数是一种特别的构造函数,用于复制已经存在的对象到新生成的对象,这是一种高效的方式。) Here bel翻译 2015-08-20 08:38:01 · 3379 阅读 · 1 评论 -
浅析C++中的static
static关键字大家都很熟悉,即所谓的静态。看下msdn是如何描述static的: When modifying a variable, the static keyword specifies that the variable has static duration (it is allocated when the program begins and deallocated when t原创 2015-09-10 10:31:10 · 2026 阅读 · 3 评论 -
浅析C++中的引用(&)
引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。一、引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法转载 2015-09-10 13:53:19 · 1462 阅读 · 0 评论 -
浅谈C++中的虚继承
何为多重继承? 面向对象编程语言中的多重继承指的是一个类可以同时继承多个父类的行为和特征功能。 就好比一个孩子可以拥有两个甚至更多的父亲。 实 际生活中,一些事物往往会拥有两个或两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 但是我们扪心自问,我们真的需要多重继承吗? 不必须需要。但是什么又是我们必须需要原创 2015-09-06 10:30:43 · 1164 阅读 · 0 评论 -
你所不知道的事儿--C++类模板的声明和实现不能分离
也许你具有良好的编程习惯,在定义一个类的时候总会把声明和实现分离开,位于不同的文件中。比如你定义一个类A,首先创建一个.h文件,代码如下:class A{public: A(int b); void show(); ~A();private: int a;}接下来你创建一个.cpp文件实现类的声明,代码如下:#include"classA.h"#includ原创 2015-09-06 15:05:46 · 3382 阅读 · 3 评论 -
win32项目--获取、修改计算机屏幕分辨率
先介绍一下单词metric,作为名词的时候有“度量标准,度量”的意思。所以system metric的意思是“系统度量单位”。接下来就要介绍一下GetSystemMetrics函数。 功能:得到被定义的系统数据或者系统配置信息。 语法: int WINAPI GetSystemMetrics(_in int nIndex); 参数: 只有一个参数index,我们称之为索引。这个索引有75个原创 2015-09-07 15:04:09 · 25968 阅读 · 1 评论 -
浅析C++中的const(比#define的优势)
使用const关键字来声明变量,表明,内存被初始化后,程序便不能再对它进行修改。 const int Months = 12; 此时,应该注意的是应该在声明中对const进行初始化,我们应该避免如下的写法: const int Months; Months = 12;你同样可以使用const声明一个指针和指针指向的内容: const char* const authorName = “Sc原创 2015-09-08 11:55:22 · 21692 阅读 · 1 评论 -
浅析c++中的内联函数(关键字inline)
常规函数:执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,跳到标记函数起点的内存单元,执行函数代码,然后跳回到地址被保存的指令处。来回的跳跃,需要一定的开销。因此,c++内联函数提供了另一种选择,即使用来函数代码来替代了函数调用。Effective c++ item2写道:尽量以const,enum,inline替代#define。其中inline指的就是内原创 2015-10-17 01:18:46 · 4824 阅读 · 0 评论 -
浅析C++中的static(一些补充)
博客《浅析C++中的static》中讲述了一些关于static的用法,但是不够详细。现在进行一些补充。1.static变量不能声明为mutable class X { public: mutable static int fx1;//错误 void inc1() { } }; int X::fx1=1;2.局部类内不能有sta原创 2015-09-15 09:33:57 · 2173 阅读 · 2 评论 -
浅析C++中String到WString的转换
今天心情不好,但是生活还要继续。 那就谈一谈wstring、string以及二者的转换吧!W顾名思义就是Width的缩写,即所谓的“宽”。首先看一下wstring和string分别如何定义的:typedef basic_string<char, char_traits<char>, allocator<char> >string;typedef basic_string<wchar_t, char原创 2015-10-18 00:24:39 · 19227 阅读 · 1 评论 -
疯了!通过返回值进行函数重载
重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。重载不关心函数的返回值类型double calculate(double);float calculate(double);以上原创 2015-09-15 11:37:40 · 8527 阅读 · 2 评论 -
c++11特性之std::thread--进阶
博客 [c++11特性之std::thread--初识](http://blog.csdn.net/wangshubo1989/article/details/49592517 "std::thread") 讲了std::thread::join和std::thread::detach的用法。今天就再来点深入的。先看看这个:int main(){ std::thread t(&threa原创 2015-11-03 23:49:13 · 6220 阅读 · 2 评论 -
c++11特性之initializer_list
之前写了一个博客《 浅析C++中的初始化列表(区别赋值和初始化)》,讲述了类的构造函数使用初始化列表来初始化成员变量。现在,撇开过往不谈,就谈一谈普通的变量赋值。即是我们要提到的initializer_list。这同样是一个C++11的特性。过往,我们这样给vector赋值:std::vector v;v.push_back(1);v.push_back(2);v.push_back(3);原创 2015-11-03 21:55:04 · 14627 阅读 · 5 评论 -
再谈PostMessage和SendMessage(如何使用 LParam 和 RParam两个参数)
博客《 浅析SendMessage与PostMessage的区别》写了一些关于SendMeesage和PostMessage的相关知识。sendmessage和postmessage就有点类似TCP和UDP的赶脚。我们也都知道了如何使用两个函数:::PostMessage (HWND, WM_KEYDOWN, WPARAM, LPARAM);::SendMessage (HWND, WM_KEYDO原创 2015-10-18 19:46:58 · 37701 阅读 · 1 评论 -
Simple Tips on C++(对于C++的一些建议)
Introduction(简介) For being a powerful object-oriented programming language, C++ is used almost everywhere including graphics and games section. (C++作为一个强有力的面向对象语言,应用于包括图形、游戏等所有领域中。)Complex features l翻译 2015-09-15 00:05:02 · 1385 阅读 · 0 评论 -
没有躲过的坑--deprecated关键字
最近两个被一个问题搞的晕晕乎乎,一直把焦点关注在 EXPRESSION SFINAE。因为对我来说,EXPRESSION SFINAE也是完全新鲜的内容,有时间也发个关于这个特性的博客。经历了一番周折,下载最新的VS2015,使用低版本的编译器,都未能解决问题。最后关键字deprecated浮出水面,哎,自惭形秽!利用 deprecated 声明,您可以将函数重载的特殊形式指定为已弃用,而杂注形式适原创 2015-11-03 21:10:47 · 5240 阅读 · 2 评论 -
c++11特性之std::thread--进阶二
继续C++11的std::thread之旅!下面讨论如何给线程传递参数 这个例子是传递一个string#include <iostream>#include <thread>#include <string>void thread_function(std::string s){ std::cout << "thread function "; std::cout << "m原创 2015-11-04 00:00:12 · 9767 阅读 · 4 评论 -
宁以const引用传递代替按值传递(内置类型除外)
《浅析C++中的引用(&)》中讲述了引用的作用。缺省的情况下C++是按值传递的,这可能付出昂贵的代价(费时)。 看看下面的代码吧:class Person{public: Person(); virtual ~Person(); ...private: std::string name; std::string adddress; };clas原创 2015-09-16 09:21:22 · 21760 阅读 · 1 评论