
C\C++
文章平均质量分 65
honpey
学生关注图像处理操作系统内核CC语言
展开
-
error C2018: 未知字符" 0x60 "
今天遇到了一个狗血的Bug,一行没有错误的代码,但是”编译器总是出现:error C2018:未知字符“0x60”。这个错误很大程度是由于VS2008默认的字体引起的,因为在出错行的下几行我多敲了一个“·”。就是Esc键下面的字符,这个字符在界面基本被无视,我还一度把这个点当成了屏幕上的小灰点。所以,如果出现这个问题,多寻找上下文的字符错误。原创 2013-03-27 19:59:45 · 6360 阅读 · 0 评论 -
文字编码 ASCII 汉字GB2312 UTF-8解析
多媒体第一个作业是LZW编码,课件的上的一句话“文本文件和光栅图像文件的数据重复度很高,所以适合字典编码”给我印象挺深,想就此发表一下对文本文件和光栅图像文件的理解。文本文件,我们经常看的估计也就是记事本了,也就是所谓的.txt文件。在熟悉文本文件之前,一些基本的编码东西还是要了解的,首先ASCII码,UNICODE码,UTF系列编码。ASCII,美国信息交换标准代码(America stan原创 2011-10-09 16:20:07 · 3173 阅读 · 0 评论 -
由CString类中转义字符”\“加汉字引起的.....
各种微软不维护MFC的消息使得许多人不再将MFC作为自己的软件开发框架,但是 本人觉得MFC为软件开发带来了巨大的方便,尤其对于计算机科班出身的人来说,所以我到现在仍然是MFC的忠实用户。今天解决一下CString中的汉字存储的问题:问题提出:读取硬盘中的一幅图像,图像的绝对地址存在CString变量之中,使用赋值构造函数CString graPath;graPath="F:\图像库\a.原创 2012-12-11 23:56:30 · 2610 阅读 · 0 评论 -
C++ 中operator用法:隐式类型转换
C++中的operator主要有两个作用,一是操作符的重载,一是操作符的转换。对于操作符的重载,许多人都不陌生,用以下这个小例子温故一下:class A{ public: A operator +(A& oa){A a;a.num=oa.num+num;return a;} int num;};int main(int argc,char* argv[])原创 2013-06-09 21:40:57 · 6141 阅读 · 2 评论 -
隐式类类型转换
C++ Primer中有这样一句话:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个转换。这句话用下面一段代码表示为:class A{ A(B b);//单个实参的构造函数 func(A a);} .....A a;B b;a.func(b);//func函数本应该接受A类型的实参,但是由于特殊构造函数的存在,所以B类型的参数b借助这个特殊的构造函原创 2013-06-04 08:28:40 · 4830 阅读 · 9 评论 -
C和C++混合编程中编译器(VS2008)设置
C和C++的公共部分是完全相同的吗?在平台一致的前提下,C++编译器能够编译C的程序吗?好像是可以,但是不一定!比如内存申请函数calloc中,使用C编译器的时候,你这样做编译通过:int * pInt= calloc(n,sizeof(int));但如果编译器是C++的,那么以上语句就通不过编译了,必须这样才行:int * pInt=( int *) calloc(n,siz原创 2013-06-25 16:27:43 · 2198 阅读 · 0 评论 -
C与C++使用struct的不同
以前总是在C++中使用struct,因此诸如以下的语句会无错编译:struct node{ double a; node *left; node *right;}......node * InitNode(node *root,node *newnode){ .....}但是对于纯净的C编译器来说,以上这段代码就出问题了。C编译器不会默认认为nod原创 2013-06-27 15:09:11 · 798 阅读 · 0 评论 -
printf参数汇总
文章来源:printf 参数汇总格式描述串"是由一系列的"格式转换说明符号"组成,格式转换说明符号的描述形式如下:% [+][-] 0 m[.n] [输出精度] (1)形式字母:制定输出格式,如表d:十进制整型数i:十进制整型数x:十六进制整型数o:八进制整型数u:无符号十进制整型数c:单个字符;s:字符串e:指数形式的浮点数f:小数形式的浮点数转载 2013-06-28 10:55:28 · 820 阅读 · 1 评论 -
逆天的C++:显式类型转换
显式类型转换也叫做强制类型转换,强制转换的操作符包括:static_cast、dynamic_cast、const_cast、reinterpret_cast。(1)static_cast。C++中所有的隐式类型转换都可以通过此运算符完成,尤其对于会损失精度的大算术类型赋值小算术类型的情况,有了static_cast描述符,编译器便会认为这是条正常语句,而不会报告警告信息;另一个典型的应用场景原创 2013-07-02 00:26:45 · 1020 阅读 · 0 评论 -
野指针与空指针
野指针是指没有进行初始化的、一种不正常的指针,空指针被NULL初始化,是一种正常的指针。#include int *p1;//全局对象默认初始化,所以p1是空指针int main(){int *p2;//野指针}野指针成因有三种:一、指针变量没有被初始化 ( 如上程序所示 );二、指针p被free或者delete之后,没有置为NULL; 三、指针操作超越了变量的作用范围,如函数返回原创 2013-07-03 11:42:39 · 750 阅读 · 1 评论 -
C语言中的一些诡异事件 const malloc 指针
原来想写一个简单的字符串的连接,即字面上strcat能够完成的功能:char * Prefix =(char *)malloc(sizeof(char)*100);char * current =(char *)malloc(sizeof(char));strcat(Prefix,current);发现,追加后的Prefix字符串总会出现许多空格。首先定位在是st原创 2011-10-08 13:09:21 · 1006 阅读 · 0 评论 -
C++语法:union的大小 内存变量的解释
union的大小是整个union结构中最大的字节的部分的字节数。内存值得解释 int *jieshou=(int *)malloc(sizeof(int)); *jieshou=111111; double *aaaa=(double *)jieshou; printf("%d %f\n",*jieshou,*aaaa);两个值输出的不同,也就说系统原创 2011-10-14 23:54:49 · 1324 阅读 · 0 评论 -
说说size_t 和 ptrdiff_t
来源博文:size_t、ptrdiff_t对于指向同一数组arr[5]中的两个指针之差的验证: 数组如下:ptr = arr;-------------------------------------------------------------------------------------------int _tmain(int argc, _转载 2013-04-13 11:14:58 · 3222 阅读 · 0 评论 -
sizeof解析C语言
sizeof是C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。文章来源:http://blog.sina.com.cn/s/blog_5c717fa001012ml7.htmlsizeof函数功能:计算数据空间的字节数1.与strlen()比较strlen计算字符数组的字符数,以"\0"为结束判断,不转载 2013-07-08 10:34:30 · 750 阅读 · 0 评论 -
定位new表达式
说起new,大部分人想起的是C++中的动态内存申请,比如 int *pInt=new int(12);今天说一下一个更深入的 operator new。construct函数是C++ STL中的一个全局函数:template inline void construct(T1 *p,const T2& value){ new (p) T1(value);}这里的new原创 2013-05-07 17:02:48 · 772 阅读 · 0 评论 -
以deque为例详细解析容器、迭代器
C++是令人着迷的一门编程语言,容器和迭代器是是C++的重要组分。容器和迭代器算是比较容易理解,容器是静态的,是负责存储数据的,比如数组,链表,二叉树等,迭代器是和容器密切相关的,是针对特定容器设计出来的数据访问器。二者紧密相连,为算法等构建提供基础设施建设。下面就从源码实现角度,详细解析容器和迭代器的关系,分析对象为STL中的deque(双端队列)。从源码角度考察容器和迭代器之间的关系。原创 2013-04-14 20:54:44 · 1128 阅读 · 0 评论 -
C++重定向
需求:一份C++源码中许多 cout实现: 将标准输出(cout)重定向到文件out.txt中freopen("out.txt","w",stdout);该函数一般用于对标准输入、标准输出以及标准出错流的重定向,实验证明对于普通的文件重定向本函数也可以完成。首先获得FILE指针 FILE *lpf = fopen("out.txt","w");然后还是通过函数freope原创 2013-04-02 11:11:23 · 2700 阅读 · 0 评论 -
画图板(一)MFC双缓冲机制
宿舍一个哥们经常问我,openCV和openGL有什么区别,我很装逼地回答:openCV是处理图像,openGL是图形。并反问:你知道图像和图像的区别吗?看来是我有眼不识泰山了,openCV的强大功能远在我的狭隘认识之上,尤其是那些矩阵的操作,又让 我回想起了当时看openGL函数的挠头,但是学还是要学的,言归正传,这次用openCV提供的函数,完成一个画图板的功能。功能要求:完成window原创 2013-01-14 22:05:33 · 1789 阅读 · 0 评论 -
析构函数什么时候调用
构造函数的一个重要作用是为对象申请资源,相应地,析构函数要负责释放这些资源。下面理解一下析构函数:何时调用析构函数:(以下摘自《C++ Prime》Page 412)撤销类对象时会自动调用析构函数;变量在超出作用域时会自动撤销;动态分配的对象只有在指向该队向的指针被删除时才撤销;如果没有删除指向动态对象的指针,则不会运行该对象的析构函数,对象会一直存在,从而导致内存泄漏。PS:当对象的引用原创 2013-05-07 11:38:00 · 5286 阅读 · 0 评论 -
STL map中subscript操作符用法
map是STL中基于红黑树的一种数据结构,该结构的元素是pair,其中key是元素的键值,搜索时使用,value是元素的实值,是这棵树中真正要保存的东西。map的函数基本是基于底层的红黑树的,也有一些是自有函数,比如subscript操作符,即“[ ]”。作出以下函数验证subscript操作符:map imap;pair tmp("A",1);imap.insert(tmp)原创 2013-04-17 11:12:39 · 624 阅读 · 0 评论 -
[C++]前置自增(自减)和后置自增(自减)
http://pppboy.blog.163.com/blog/static/302037962011112311822421/一、基本认识2010年学习过的一点总结,今天没防看到,感觉还是不太完善,做事情,就一定要把它做好。不是追求完美,但一定要保持一颗保持进步的心。二、重载和句法区别C++规定后缀形式有一个int类型参数,当函数被调用时,编译器传递一个0做为int参数的转载 2013-04-14 21:37:58 · 2324 阅读 · 0 评论 -
vector中erase干了什么
今天碰到一个笔试题,问下面这段程序错在哪里:vector array;vector::iterator itor;vector::iterator itor2;for(itor=array.begin();itor!=array.end();){ if(6==*itor) { itor2=itor; array.erase(itor2);原创 2013-05-07 09:57:30 · 664 阅读 · 0 评论 -
MFC消息映射机制
C++中的多态大大简化了编程,使得程序的抽象性更高,但是在MFC这样一个庞大的类库中,如果消息的传递采用多态机制,将在每个类中引入大量的虚表,不适用,因此MFC中的消息传递采用消息映射机制,记住,这就叫消息映射,不是别的。使用class wizard自动生成的代码中,和消息映射直接相关的语句是DECLARE_MESSAGE_MAP()和BEGIN_MESSAGE_MAP(C原创 2012-12-25 01:35:42 · 767 阅读 · 0 评论 -
由push_back引起的复制构造函数
以下这段程序有错误,是关于没有复制构造函数的错误,下面我们将解开这段程序错误之谜:#include #include #include using namespace std;int i=0;int j=0;class CDemo{ public: CDemo():str(NULL){cout<<"constructor_"<<i++<<endl;};原创 2013-05-07 11:42:33 · 1298 阅读 · 0 评论 -
函数返回值是const或者const引用
const表明一个值是不可更改的,我一直试图了解如下语句中,const的作用const int & getInt();int & getInt();二者的差距在于前者的返回值是个右值,后者的返回值是个左值。也就是说,前者返回后只能赋值给其他变量(因为它被const修饰了,也就是说这个这个变量所指向的内存是不能被更改的),而后者可以称为赋值的对象。对此,我写了如下一个程序段:原创 2013-04-24 22:38:30 · 7378 阅读 · 1 评论 -
C++中自增(减)前缀式和后缀式区别
以前经常看到诸如++i--++之类的C、Java题,那个时候是这样理解的:前缀式的++i是指先计算i然后整个++i融为一体返回i递增后的值,i++是先用i的原值完成正了八经的程序,什么都完事了之后再递增。下面通过C++中对自定义类型的递增操作,说明前缀式和后缀式的区别。用C++封装int类class NewInt { public: NewInt():RootInt(0)原创 2013-04-14 22:33:07 · 2125 阅读 · 0 评论 -
STL 中list删除元素
list容器中删除元素分如下两种情形,第一种是很大条地使用remove函数输入list的头部iterator和尾部iterator,如下代码list ilist;ilist.push_back(1);ilist.push_back(2);remove(ilist.begin(),ilist.end(),1);//删除整个list中值为1的字节点上面这个程序不需要用户参与,属于比原创 2013-04-24 11:01:42 · 2921 阅读 · 4 评论