随笔分类 -  C/C++

摘要:1.#include //不可以定义string s;可以用到strcpy等函数using namespace std;#include //可以定义string s;可以用到strcpy等函数using namesapce std;#include //不可以定义string s;可以用到s... 阅读全文
posted @ 2014-12-24 10:17 maowang 阅读(15972) 评论(1) 推荐(2) 编辑
摘要:最近看了下Inside C++里面讲的对虚继承层次的对象的内存布局,发现在不同编译器实现有所区别。因此,自己动手探索了一下。结果如下:首先,说说GCC的编译器.它实现比较简单,不管是否虚继承,GCC都是将虚表指针在整个继承关系中共享的,不共享的是指向虚基类的指针。class A {int a;vir... 阅读全文
posted @ 2014-08-31 16:25 maowang 阅读(688) 评论(0) 推荐(0) 编辑
摘要:strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。void*memcpy(void*dest,constvoid*src,size_tcount);char* strcpy(char* dest, constchar* src) // 实现src到dest的复制{  阅读全文
posted @ 2014-04-10 15:07 maowang 阅读(920) 评论(1) 推荐(0) 编辑
摘要:所谓”位域“是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 它实际上是C语言提供的一种数据结构。使用位域的好处是: 1.有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。这样节省存储空间,而且处理简便。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。 2.可以很方便的利用位域把一个变量给按位分解。比如只需要4个大小在0到3的随即数,就可以只rand()一次,然后每个位域取2个二进制位即可,省时省空间。 由于没有其他硬件平台. 阅读全文
posted @ 2014-04-10 11:29 maowang 阅读(6202) 评论(0) 推荐(0) 编辑
摘要:sizeof()功能:计算数据空间的字节数1.与strlen()比较strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。2.指针与静态数组的sizeof操作指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。注意:int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int);对于静态数组,sizeof可直接计算数组大小;例:int a[10];char b[]="hello&qu 阅读全文
posted @ 2014-04-10 11:20 maowang 阅读(578) 评论(0) 推荐(0) 编辑
摘要:C:decocthexchdecocthexchdecocthexchdecocthexch0000NUL(null)324020(space)6410040@9614060`1101SOH(start of header)334121!6510141A9714161a2202STX(start of text)344222"6610242B9814262b3303ETX(end of text)354323#6710343C9914363c4404EOT(end of transmission)364424$6810444D10014464d5505ENQ(enquiry)3745 阅读全文
posted @ 2014-02-27 20:45 maowang 阅读(9613) 评论(0) 推荐(0) 编辑
摘要:引言毫无疑问,我们都看到过像 TCHAR, std::string, BSTR 等各种各样的字符串类型,还有那些以 _tcs 开头的奇怪的宏。你也许正在盯着显示器发愁。本指引将总结引进各种字符类型的目的,展示一些简单的用法,并告诉您在必要时,如何实现各种字符串类型之间的转换。在第一部分,我们将介绍3种字符编码类型。了解各种编码模式的工作方式是很重要的事情。即使你已经知道一个字符串是一个字符数组,你也应该阅读本部分。一旦你了解了这些,你将对各种字符串类型之间的关系有一个清楚地了解。在第二部分,我们将单独讲述string类,怎样使用它及实现他们相互之间的转换。字符基础 -- ASCII, DBCS 阅读全文
posted @ 2014-02-27 20:27 maowang 阅读(1227) 评论(0) 推荐(0) 编辑
摘要:1,前言 无数次听到“我要开始学习C++!”的呐喊,无数次听到“C++太复杂了,我真的学不会”的无奈。Stan Lippman先生曾在《C++ Primer》一书中指出“C++是最为难学的高级程序设计语言之一”,人们常将“之一”去掉以表达自己对C++的敬畏。诚然,C++程序设计语言对于学习者的确有很多难以逾越的鸿沟,体系结构的庞大,应接不暇并不断扩充的特性……除此之外,参考资料之多与冗杂使它的学习者望而却步,欲求深入者苦不堪言。希望这一份不完全导引能够成为您C++学习之路上的引路灯。 撰写本文的初衷并不打算带领大家体验古老的C++历史,如果你想了解C++的历史与其前期发展中诸多技术的演... 阅读全文
posted @ 2014-02-27 20:25 maowang 阅读(338) 评论(0) 推荐(0) 编辑
摘要:学了C然后C++,然后MFC/Windows,然后是C#,其中数据类型很多,由基本类型衍生的typedef类型也N多。熟知基本数据类型是我们正确表达实际问题中各种数据的前提,因此我分类总结了一下C/C++/Windows /C#基本数据类型,以便日后查阅。ANSI C/C++基本数据类型:TypeSize数值范围无值型void0 byte无值域布尔型bool1 bytetruefalse有符号短整型short [int] /signed short [int]2 byte-32768~32767无符号短整型unsigned short [int]2 byte0~65535有符号整型int /s 阅读全文
posted @ 2014-02-27 15:21 maowang 阅读(1270) 评论(0) 推荐(1) 编辑
摘要:ANSI UNICODE 通用(char.h) (wchar.h) (tchar.h)char wchar_t TCHARchar * wchar_t * PTCHAR (PTSTR,LPWSTR,PWSTR,WCHAR)printf wprintf _tprintfscanf wscanf _tscanfatoi _wtoi_ttoiatol _wtol_ttolitoa _itow_itotltoa _ltow_ltotatof _wtof_tstofstrlen wcslen_tcslenstrcat wcscat _tcscatstrcpy wcscpy _tcscpy... 阅读全文
posted @ 2014-02-27 14:44 maowang 阅读(2781) 评论(0) 推荐(0) 编辑
摘要:MFC:类名:CFileManager结构体名:Task方法名:GetName()宏:FILE_NUM变量名:strPath、m_cs、m_listFile文件名:FileManager.h或FILEMAMAGER.h(把类名的C去掉,CFileManager对应的文件)C#:类名:FileManager方法名:GetName()变量名:strPath文件名:FileManager.cs(和类名保持一致) 阅读全文
posted @ 2014-02-26 21:48 maowang 阅读(354) 评论(0) 推荐(0) 编辑
摘要:以下内容为自己一年多的C++学习心得,纯原创,转载请注明源地址。一年多的C++学习过程中,自己阅读了很多C++经典著作,有《effective c++》,《more effective c++》,《c++ primer》等,每次阅读著作都会总结一些心得,现在拿出来和大家分享一下。1.struct成员默认访问方式是public,而 class默认访问方式是private!2.exit函数终止程序执行会调用析构函数 ,abort函数终止程序不会调用析构函数!3.静态局部变量直到程序终止时才退出!4.通过public 函数返回 private成员的引用有可能会破坏类的封装 ,造成外部变量可以改变类私 阅读全文
posted @ 2013-08-29 20:52 maowang 阅读(13396) 评论(19) 推荐(6) 编辑
摘要:1 #include 2 #include 3 #include 4 using namespace std; 5 6 int main() 7 { 8 cout ::max)();11 cout ::min)() ::max)();14 cout ::min)() ::max)();17 cout ::min)() ::max)();20 cout ::min)() ::max)();23 cout ::min)() ::max)();26 cout ::min)() ::max)();29 cout ::min)() :... 阅读全文
posted @ 2013-07-02 14:32 maowang 阅读(20439) 评论(0) 推荐(1) 编辑
摘要:在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf("%lld",a),printf("%I64d",a),和cout << a三种方式。本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种编译器分别是gcc(mingw32),g++(mingw32),gcc(linux i386),g++(linux i386),Microso 阅读全文
posted @ 2013-07-01 09:27 maowang 阅读(818) 评论(0) 推荐(0) 编辑
摘要:C++中const用法总结1. const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。例如:const int nValue; //nValue是constint const nValue; // nValue是const但是对于指针类型的TYPE,不同的写法会有不同情况,例如:A. const char *pContent;B. char * 阅读全文
posted @ 2012-12-07 18:16 maowang 阅读(434) 评论(1) 推荐(0) 编辑
摘要:C:PrecedenceOperatorDescriptionAssociativity1++--Suffix/postfix increment and decrementLeft-to-right()Function call[]Array subscripting.Structure and union member access−>Structure and union member access through pointer(type){list}Compound literal(C99)2++--Prefix increment and decrementRight-to- 阅读全文
posted @ 2012-12-07 18:12 maowang 阅读(282) 评论(0) 推荐(0) 编辑
摘要:scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/scanf("%s",string); /*遇到空格认为输入结束*/所以在输入的字符串中包含空格时,应该使用gets输入。scanf和gets获取字符串时的区别在C语言中,能构获取字符串的函数至少有两个:1.scanf( 阅读全文
posted @ 2012-12-07 18:11 maowang 阅读(490) 评论(0) 推荐(1) 编辑
摘要:cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别。cin.get()每次读取一整行并把由Enter键生成的换行符留在输入队列中,比如:#include <iostream>using std::cin;using std::cout;const int SIZE = 15;int main( ){cout << "Enter your name:";char name[SIZE];cin.get(name,SIZE);cout << "name:&q 阅读全文
posted @ 2012-12-07 18:11 maowang 阅读(471) 评论(0) 推荐(0) 编辑
摘要:论坛和博客上常常看到关于C语言中运算符的迷惑,甚至是错误的解读。这样的迷惑或解读大都发生在表达式中存在着较为复杂的副作用时。但从本质上看,仍然是概念理解上的偏差。本文试图通过对三个典型表达式的分析,集中说说运算符的优先级、结合性方面的问题,同时说明它们跟求值过程之间存在的区别与联系。优先级决定表达式中各种不同的运算符起作用的优先次序,而结合性则在相邻的运算符的具有同等优先级时,决定表达式的结合方向。(一)a = b = c;关于优先级与结合性的经典示例之一就是上面这个“连续赋值”表达式。b的两边都是赋值运算,优先级自然相同。而赋值表达式具有“向右结合”的特性,这就决定了这个表达式的语义结构是“ 阅读全文
posted @ 2012-12-07 13:29 maowang 阅读(4757) 评论(1) 推荐(0) 编辑