C/C++
文章平均质量分 52
草根_USTC
不要追一匹马,你用追马的时间去种草,待春暖花开时,能吸引一批骏马来供你选择;不要刻意巴结一个人,用暂时没有朋友的时间去提升自己的能力,待时机成熟时,便有一批朋友与你同行;用人情做出来的朋友只是暂时的,用人格做出来的朋友是长久的。所以,丰富自己比取悦别人更有力量。种下梧桐树,引得凤凰来;你若盛开,蝴蝶自来。你若精彩,天自安排。 ——屠呦呦
展开
-
visual studio 2008中头文件和库文件路径设置
在程序开发中,很多时候需要用到别人开发的工具包,如OpenCV和itk。一般而言,在vs2008中,很少使用源文件,大部分是使用对类进行声明的头文件和封装了类的链接库(静态lib或动态dll)。 如果要使用这些类,需要在文件中包含头文件的名字,如#include “cv.h”。但这个并不够,因为这个文件一般来说不在当前目录下,有两种方法解决这个问题。一,将所包含的头文件复制到当前目转载 2013-11-08 10:35:18 · 789 阅读 · 0 评论 -
浅谈C语言 extern 指针与数组
浅谈C语言 extern 指针与数组/* * d.c * * Created on: Nov 15, 2011 * Author: root */#include "apue.h"int a[] = {3,2};void hello(){ printf("d.c %d",a);}/* ================转载 2012-08-31 16:01:45 · 779 阅读 · 0 评论 -
系统堆和栈
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、转载 2012-08-31 23:45:37 · 307 阅读 · 0 评论 -
系统运行时栈空间分析
作者:王靖 blog地址:http://blog.csdn.net/wang_jing_2008 实验环境:实验平台:visual studio 2010 + Win 7(x64)说明:编译器运行在Debug模式 Win32模式下。见图1: 实验调试源码: #include "stdafx.h"#include #include原创 2012-09-01 15:58:34 · 931 阅读 · 3 评论 -
flaot型与0比较问题
前一段时间读了一下林锐博士的《高质量C/C++编程指南》,其中有一个比较经典的问题。请写出float x与“零值”比较的if语句?当时只知道不能直接用float类型的值与0进行“==”或“!=”比较,但不知道该具体怎么写这个if语句。看过答案才知道,应该设法转化成“>=”或“”,即:co转载 2012-08-31 10:18:23 · 1057 阅读 · 0 评论 -
flexible array 柔性数组
结构体变长的妙用——0个元素的数组有时我们需要产生一个结构体,实现了一种可变长度的结构。如何来实现呢?看这个结构体的定义:typedef struct st_type{int nCnt;int item[0];}type_a;(有些编译器会报错无法编译可以改成:)typedef struct st_type{int nCnt;int item[]转载 2012-08-31 13:27:40 · 419 阅读 · 0 评论 -
C++模版 代码文件放置问题
方法一:可以把模版类定义和模版类成员函数实现放在一个头文件中; 方法二:模版类定义放在一个头文件中,实现放在另一个头文件中;但在模版类定义头文件尾部要#include后面这个实现文件。 方法三:模版类定义放在一个头文件中,实现放在一个CPP源文件中,但在模版类定义头文件尾部要#include后面这个实现文件(#include xxx原创 2012-08-21 15:17:02 · 365 阅读 · 0 评论 -
详解大端模式和小端模式
一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必转载 2012-08-31 11:11:52 · 493 阅读 · 0 评论 -
C语言的数组名和对数组名取地址
相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针,指向函数的入口地址。现在又这样一个问题,如果对数组名取地址,那得到的会是什么呢?很多人立刻会想到:给指针取地址,就是指针的指针,既二级指针嘛!当然这样的结论是错误的,不然这篇笔记也就没有意义了。下面我们来逐步分析,下面是一段验证这个问题的代码Code:#include int转载 2012-08-31 14:05:54 · 1364 阅读 · 0 评论 -
C/C++数组名与指针区别深入探索
引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。很幸运,我的大学老师就是其中之一。时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解。 想必这种误转载 2012-08-29 16:16:13 · 1104 阅读 · 0 评论 -
C++ 只能指针 auto_ptr 原理 解析 源码
By SmartPtr(http://www.cppblog.com/SmartPtr/)auto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那样非常小心的使用它才能保证不转载 2012-08-30 12:50:37 · 1340 阅读 · 0 评论 -
C++虚继承分析及对象模型
C++虚继承分析及对象模型 虚继承和虚基类的定义是非常的简单的,但是在C++语言中虚继承作为一个比较生僻的但是又是绝对必要的组成部份而存在着,并且其行为和模型均表现出和一般的继承体系之间的巨大的差异(包括访问性能上的差异),现在我们对虚继承和虚基类进行研究。 定义:虚继承:在继承定义中包含了virtual关键字的继承关系;虚基类:在虚继承体系中的通过virtual继承而来的原创 2012-08-13 22:39:15 · 458 阅读 · 0 评论 -
C++标准转换运算符dynamic_cast
C++标准转换运算符dynamic_cast dynamic_cast (expression)dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的转换方式来替代。但是也因此它是最常用,最不可缺少的一个运算符。与static_cast一样,dy转载 2012-08-29 11:00:52 · 282 阅读 · 0 评论 -
C++转换运算符重载
大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能。 转换运算符的定义方式比较特别,方法如下:operator 类名();转换运算符的重载函数是没有返回类型的,它和类的构造函数,析构函数一样是不遵循函数有返回类转载 2012-08-25 22:40:47 · 303 阅读 · 0 评论 -
C++ Placement Operator New
placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。 它的原型如下: void *operator new( size_t, void *p )throw() { return p; } 使用形式:new(plac原创 2012-08-26 19:41:27 · 364 阅读 · 0 评论 -
STL迭代器及总结
STL迭代器及总结 解释 迭代器是一种对象,它能够用来遍历STL容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上象迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。 迭代器提供一些基本操作符:*、++、==、!=、=。这些操作转载 2012-09-04 10:58:18 · 526 阅读 · 0 评论 -
C/C++中调用Lua
前提设置:源代码:// InvokeLua.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include extern "C"{ #include "lua.h" #include "lualib.h" #include "lauxli原创 2013-11-08 14:32:19 · 654 阅读 · 0 评论 -
C语言除法运算符“/”和求余运算符“%”
C语言除法运算符“/”和求余运算符“%”看似两个很简单的运算符,却也真要掌握用好它也不容易,本文作为关于此类运算符的各方面的问题的汇总,希望对你我都有一些帮助。 除法运算符“/”。二元运算符,具有左结合性。参与运算的量均为整型时,结果为整型,舍去小数。如果运算量中有一个为实型,结果为双精度实型。例如:5/2=2,1/2=05/2.0=2.5 取模运原创 2012-09-16 19:57:29 · 1903 阅读 · 0 评论 -
C++中左移右总结
移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0填充。算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。 C++中,整数分有符号数和无符号数两种,对于这两种数做左移、右移运算,稍有区别:1、如果是无符号数:原创 2012-09-11 15:46:47 · 3196 阅读 · 0 评论 -
最长公共子串问题
最长公共子串问题( longest common substring problem)也就是找到两个或以上的字符串的最长公共子串,该字串在位置上相邻。例如ABAB,BABA,ABBA,最长公共子串为AB。 我们可以把该问题定义如下:给出两个字符串S和T,S的长度为m,T的长度为n,找出S与T的最长公共子串。假设S = “ABAB”,T=“BABA”,我们可以构造一个如下的矩阵:原创 2012-09-10 22:31:41 · 447 阅读 · 0 评论 -
C++模版
1.模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float转载 2012-08-27 20:43:21 · 234 阅读 · 0 评论 -
malloc(0)的内存分配情况
#include using namespace std;int main(){ char *p; if((p=(char *)malloc(0))==NULL) cout else cout} 首先: 在标准的malloc实现中,并不检查输入值的大小,而是将输入值做对齐操转载 2012-08-27 18:20:17 · 445 阅读 · 0 评论 -
C语言变长参数处理
VA_LIST 是C语言中解决变长参数问题的一组宏 VA_LIST的用法: (1)首先在函数里定义一个VA_LIST类型的变量,这个变量是指向参数的指针; (2)然后用VA_START宏初始化刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数; (3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数原创 2012-08-28 12:19:56 · 1775 阅读 · 1 评论 -
C语言字节对齐详解
一、什么是对齐,以及为什么要对齐:1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。2. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只转载 2012-09-06 14:25:26 · 541 阅读 · 1 评论 -
C语言宏定义中的#,##,#@及\符号的作用
C语言宏定义中的#,##,#@及\符号的作用 1、#(stringizing)字符串化操作符作用:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。如:#define example(instr)printf("the input string is:\t%s\n",#instr)#define转载 2012-09-06 10:12:11 · 823 阅读 · 0 评论 -
main函数之前做了什么?
谁调用了我的 main? 现在最重要的是要跟得上潮流,所以套用比较时髦的话,谁动了我的奶酪。谁调用了我的 main?不过作为计算机工作者,我劝大家还是不要赶时髦,今天Java热,明天 .net 流行,什么时髦就学什么。我的意思是先花几年把基本功学好,等你赶时髦的时候也好事半功倍。废话不多说了。 我们都听说过一句话:“main是C语言的入口转载 2012-09-05 14:26:05 · 958 阅读 · 0 评论 -
进入main函数之前做了什么?
我们都听说过一句话:“main是C语言的入口”。我至今不明白为什么这么说。就好像如果有人说:“挣钱是泡妞”,肯定无数砖头拍过来。这句话应该是“挣钱是泡妞的一个条件,只不过这个条件特别重要”。那么上面那句话应该是 “main是C语言中一个符号,只不过这个符号比较特别。” 我们看下面的例子: /* file name test00.c */转载 2012-09-05 14:47:40 · 814 阅读 · 0 评论 -
extern "C"的作用
extern "C"的作用(一) 前些天,编程序是用到了很久以前写的C程序,想把里面的函数利用起来,连接发现出现了找不到具体函数的错误: 以下是假设旧的C程序库 C的头文件 /*-----------c.h--------------*/ #ifndef _C_H_ #define _C_H_ extern int add(int x, int转载 2012-09-05 12:26:59 · 647 阅读 · 0 评论 -
C++标准转换运算符reinterpret_cast
C++标准转换运算符reinterpret_cast reinterpret_cast (expression)reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了类的继承以外)。转载 2012-08-29 10:34:49 · 549 阅读 · 0 评论 -
C++标准转换运算符static_cast
C++标准转换运算符static_caststatic_cast (expression)虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用。其实这是很容易理解的,static决定的是一个变量的作用域和生命周期,比如:在一个文件中将变量定义为static,则说明这个变量只能在本Package中使用;在转载 2012-08-29 10:15:32 · 232 阅读 · 0 评论 -
深入理解C++中关键字 mutable
转载网址:http://dev.yesky.com/393/3007393.shtmlmutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的转载 2012-08-06 15:18:50 · 239 阅读 · 1 评论 -
从一道题谈C++中构造函数调用构造函数
转载网址:http://www.cnblogs.com/chio/archive/2007/10/20/931043.html 题目如下:问下列代码的打印结果为 0 吗?#include stdlib.h>#include iostream>using namespace std;struct CLS{ int m_i; CLS(转载 2012-08-04 14:19:55 · 397 阅读 · 0 评论 -
MFC消息响应机制分析
1引言微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类库。MFC封装了大部分Windows API函数和Windows控件,使得程序的开发变得简单,极大的缩短了程序的开发周期。MFC独创的Document/View框架结构,能够将管理数据的代码和显示数据的程序代码分开,并且设计了一套方便的消息映射和命令传递机制转载 2007-06-25 00:04:00 · 603 阅读 · 0 评论 -
ctrl+z解读
<br />解读如下:<br />windows对于标准输入中的EOF的处理,实际上是用了一个很不常用的键盘消息,即(ctrl+z)这个组合,当按下这个组合键的时候,会有:WM_KEYDOWN(90),WM_CHAR(26),WM_KEYUP(90),这三个消息。<br /><br />windows把WM_CHAR这个消息值放到标准输入缓冲区里面去,这时候有两种情况。<br /><br />第一:<br />********26**********,也就是在这个ctrl+z对应的键盘WM_CHAR值之前还转载 2011-01-30 17:08:00 · 1173 阅读 · 1 评论 -
C++ namespace
<br />本人转自:http://blog.csdn.net/liufei_learning/archive/2010/03/18/5391334.aspx<br /> <br />一、 为什么需要命名空间(问题提出)<br /> 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。<br /> 在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系原创 2011-01-30 15:30:00 · 5750 阅读 · 4 评论 -
指针常量和常量指针
(1) char* const ch------- 指针常量 指针类型的常量,即指针本身是常量,只能指向固定的区域;但该区域中的内容可以改变。 (2) const char *ch 或 char const *ch---------常量指针 指向常量的指针,即指针指向区域的内容是常量,不能更改;但该指针可以指向其它区域。原创 2010-03-21 10:33:00 · 493 阅读 · 0 评论 -
windows data type
Data TypesThis topic lists the data types most commonly used in the Microsoft Foundation Class Library. Most of the data types are exactly the same as those in the Windows Software Development Ki原创 2007-06-18 23:29:00 · 490 阅读 · 0 评论 -
Platform SDK data types
Windows Data TypesThe data types supported by Microsoft® Windows® are used to define function return values, function and message parameters, and structure members. They define the size and meaning原创 2007-06-18 23:34:00 · 492 阅读 · 0 评论 -
GetDesktopWindow和GetWindow区别
GetWindowThe GetWindow function retrieves a handle to a window that has the specified relationship (Z order or owner) to the specified window. HWND GetWindow( HWND hWnd, // handle to original原创 2007-06-06 19:47:00 · 12004 阅读 · 0 评论 -
GetWindowLong函数详解
函数功能描述:用这个函数能够获得指定窗口的信息函数原型:LONG GetWindowLong( HWND hWnd,int nIndex )参数:hWnd:指定窗口的句柄nIndex:需要获得的信息的类型 值 功能nIndex取值如下:GWL_EXSTYLE 得到扩展的窗口风格GWL_STYLE 得到窗口风格GWL_WNDPROC 得原创 2007-06-05 20:34:00 · 3118 阅读 · 0 评论