c/c++
拉轰小郑郑
这个作者很懒,什么都没留下…
展开
-
C++ Map常见用法说明
http://blog.csdn.net/shuzfan/article/details/53115922#三-取值一 声明二 插入操作1 使用 进行单个插入1 使用insert进行单个和多个插入三 取值四 容量查询五 迭代器六 删除交换1 删除2 交换七 顺序比较八 查找九 操作符C++中map提供的是一种键转载 2017-12-08 11:50:43 · 272 阅读 · 0 评论 -
派生类的对象访问基类中被派生类覆盖或隐藏了的函数或变量
隐藏基类成员函数的情况:如果在派生类中定义了一个与基类同名的函数,不管这个函数的参数列表是不是与基类中的函数相同,则这个同名的函数就会把基类中的所有这个同名的函数的所有重载版本都隐藏了,这时并不是在派生类中重载基类的同名成员函数,而是隐藏,比如类A中有函数f(int i,intj)和f(int i)两个版本,当在从A派生出的类B中定义了基类的f()函数版本时,这时基类中的fun转载 2016-08-12 19:55:42 · 641 阅读 · 0 评论 -
C++中派生类对基类成员的三种访问规则
C++中派生类对基类成员的访问形式主要有以下两种:1、内部访问:由派生类中新增成员对基类继承来的成员的访问。2、对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。今天给大家介绍在3中继承方式下,派生类对基类成员的访问规则。 1、私有继承的访问规则当类的继承方式为私有继承时,基类的public成员和protected成员被继承后成为派生类的private转载 2016-09-04 11:22:16 · 9563 阅读 · 2 评论 -
C语言修饰词之violate
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。 下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器)2) 一个中断服务子程序中会访问到的非自动变转载 2016-09-14 16:14:26 · 603 阅读 · 0 评论 -
c/c++语言变量声明内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表转载 2016-09-14 14:25:08 · 826 阅读 · 0 评论 -
C语言有符号数与无符号数之间的转换
无符号数:不存在正负之分,所有位都用来表示数的本身。有符号数:最高位用来表示数的正负,最高位为1则表示负数,最高位为0则表示正数。 1.无符号数--->有符号数 看无符号数的最高位是否为1,如果不为1(为0),则有符号数就直接等于无符号数;如果无符号数的最高位为1,则将无符号数取补码,得到的数就是有符号数。以unsigned char和char为例子:1.1将无符号数2转转载 2016-08-11 21:09:40 · 3518 阅读 · 0 评论 -
c/c++中各数据类型在内存中的存储方式
基本的数据类型有:int 4long 4short 2signed char 1unsigned char 1unsigned long 4unsigned short 2float 4double 8 基本为:char 1字节short 2字节int 4字节long 4字节float 4字节do转载 2016-08-11 20:39:33 · 2520 阅读 · 0 评论 -
C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面转载 2016-08-11 20:16:02 · 208 阅读 · 0 评论 -
C/C++中指针和引用之相关问题深入研究
一、基本知识指针和引用的声明方式:声明指针: char* pc;声明引用: char c = 'A' char& rc = c;它们的区别:①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可转载 2016-09-14 13:22:37 · 330 阅读 · 0 评论 -
C++ static、const和static const类型成员变量声明以及初始化
C++ static、const和static const 以及它们的初始化const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数转载 2016-09-02 13:24:09 · 565 阅读 · 0 评论 -
C++成员变量的初始化顺序问题
可作为程序员面试宝典第五版119页解析问题来源:由于面试题中,考官出了一道简单的程序输出结果值的题:如下, [cpp] view plaincopyprint? class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){}转载 2016-09-02 11:58:35 · 490 阅读 · 0 评论 -
C/C++预处理器详解
C/C++编译系统编译程序的过程为预处理、编译、链接。预处理器是在程序源文件被编译之前根据预处理指令对程序源文件进行处理的程序。预处理器指令以#号开头标识,末尾不包含分号。预处理命令不是C/C++语言本身的组成部分,不能直接对它们进行编译和链接。C/C++语言的一个重要功能是可以使用预处理指令和具有预处理的功能。C/C++提供的预处理功能主要有文件包含、宏替换、条件编译等。 1、文件包含转载 2016-08-11 15:20:09 · 469 阅读 · 1 评论 -
static静态变量的理解
static静态变量的理解静态变量 类型说明符是static。静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直 到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后转载 2016-09-16 11:23:32 · 334 阅读 · 0 评论 -
对齐系数 #pragma pack(k)
下面两个结构体[cpp] view plain copy print?struct One{ double d; char c; int i; } struct Two{ char c; double d; int i; } struct One{转载 2016-09-17 15:31:47 · 1590 阅读 · 0 评论 -
sizeof与strlen的区别
http://blog.csdn.net/21aspnet/article/details/1539951char str[20]="0123456789"; int a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记。 int b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大转载 2017-09-21 20:53:27 · 238 阅读 · 0 评论 -
char* 指向内容不能修改的问题(整理)
http://www.cnblogs.com/yylqinghao/archive/2010/04/27/1721752.html同事遇到一个简单的问题: char* str = "resource";str[6] = 'k'; //这句报内存写入错误*(str+6) = 'k'; //这样写同样报错 但是这样就没问题:char转载 2017-09-21 11:05:52 · 881 阅读 · 0 评论 -
char *a 与char a[] 的区别
http://www.cnblogs.com/kaituorensheng/archive/2012/10/23/2736069.htmlchar *a = "hello" 中的a是指向第一个字符‘a'的一个指针char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针但二者并不相同:看实例:把两个字符串相加:转载 2017-09-20 17:51:45 · 1076 阅读 · 0 评论 -
Android中的智能指针:强指针和弱指针
http://bbs.16rd.com/thread-1462-1-1.htmlandroid中定义了两种智能指针类型,一种是强指针sp(strong pointer),另外一种是弱指针(weak pointer)。其实称之为强引用和弱引用更合适一些。强指针与一般意义的智能指针概念相同,通过引用计数来记录有多少使用者在使用一个对象,如果所有使用者都放弃了对该对象的引用,则该对象将被自动转载 2017-07-25 10:01:14 · 550 阅读 · 0 评论 -
静态链接库LIB和动态链接库DLL的区别 创建和示例
1.什么是静态连接库,什么是动态链接库 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静转载 2016-10-02 22:03:04 · 331 阅读 · 0 评论 -
delete一个指针之后,要记得设置为NULL
众所周知,最开始我们用new来创建一个指针,那么等我们用完它之后,一定要用delete将该指针删掉。但是,值得注意的是,难道就仅仅是删除这个指针这么简单的么?下面,我们用一个程序来说明这个问题:?12345678910111213141516171819#includ转载 2016-09-27 10:35:17 · 5153 阅读 · 3 评论 -
malloc(0)的问题
http://blog.csdn.net/js_xj/article/details/5826042下面进入正题,关于malloc(0)这个问题,我在网上看到有个面试题好像就是问这个的,原题好像是:char *ptr; if ((ptr = (char *)malloc(0)) == NULL) puts("Got a null pointer"); else pu转载 2016-09-08 10:43:36 · 459 阅读 · 0 评论 -
C语言变量声明加冒号的用法 称为“位域”或“位段“
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二转载 2016-09-07 18:03:26 · 5956 阅读 · 0 评论 -
getchar()在C程序中的妙用!
getchar()在C程序中的功能是接收一个字符,当我们在连续输入字符的时候getchar()会给你意想不到的效果。下面是net小伙做的一些测试:首先看下面的这个程序: 1 #include 2 #include 3 int main(void) 4 { 5 int a,b,c; 6 printf("please input num a:\n");转载 2016-09-19 10:19:53 · 678 阅读 · 1 评论 -
c/c++结构体知识介绍
1.结构体类型定义定义方式1:Typedef struct LNode { int data; //数据域 struct LNode *next; //指针域} *LinkList; 定义方式2:struct LNode { int data; //数据域 struct LNode *next; /转载 2016-09-18 21:11:52 · 654 阅读 · 0 评论 -
语言 gets()和scanf()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/scanf("%s",string);转载 2016-09-18 12:51:10 · 265 阅读 · 0 评论 -
C++宏定义详解
一、#define的基本用法 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析转载 2016-08-11 14:52:36 · 217 阅读 · 0 评论 -
Char转为int时高位符号扩展的问题
一、短数据类型扩展为长数据类型1、要扩展的短数据类型为有符号数的 进行符号扩展,即短数据类型的符号位填充到长数据类型的高字节位(即比短数据类型多出的那一部分),保证扩展后的数值大小不变如1:char x=10001001b; short y=x; 则y的值应为11111111 10001001b; 2:char x=00001001b; sho转载 2016-08-10 19:57:45 · 1082 阅读 · 0 评论 -
流运算符为什么不能重载为成员函数,只能用友元函数重载
一、为什么operator如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。。。。而 >> 或如果一定要声明为成员函数,只能成为如下的形式:ostream & operator{ return output;}所以在运用这个不合符人的习惯。 二、cout //用重转载 2015-12-15 14:22:28 · 11667 阅读 · 6 评论 -
c++函数返回引用
函数返回值和返回引用是不同的函数返回值时会产生一个临时变量作为函数返回值的副本,而返回引用时不会产生值的副本,既然是引用,那引用谁呢?这个问题必须清楚,否则将无法理解返回引用到底是个什么概念。以下是几种引用情况:1,引用函数的参数,当然该参数也是一个引用 const string &shorterString(const string &s1,const string转载 2015-12-08 21:55:07 · 391 阅读 · 0 评论 -
typedef char * pStr的问题,const char *p1 = string和const pStr p2 = string的区别
下面的代码中编译器会报一个错误,你知道是哪个语句错了吗?[cpp] view plaincopyprint?typedef char * pStr; char string[4] = "abc"; const char *p1 = string; const pStr p2 = string; p1++; p2++; typedef char转载 2015-08-18 16:09:32 · 1148 阅读 · 1 评论 -
c++ substr()和assign()函数用法
C++中substr()函数用法substr(起始位置,长度)#include#includeusing namespace std;main(){string s("12345asdf");string a=s.substr(0,4); //获得字符串s中 从第0位开始的长度为4的字符串cout}转载 2015-07-22 23:03:15 · 1049 阅读 · 0 评论 -
C++ 文件结束符
问题描述:windows下int main(){ string str; while(cin>>str); cout"\n""end"endl;}控制台输入多个字符串后,输入文件结束符crtl-Z,并未使while循环结束,该如何跳出while循环? 解决方法:方法1:回车 - ctrl-z - 回车 方法2:改代码,设置自己的文件结束符String a转载 2015-08-11 21:40:40 · 694 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而转载 2015-08-14 11:07:01 · 304 阅读 · 0 评论 -
C++ string 详解
C++ string 详解任何人对本文进行引用都要标明作者是Nicolai M.Josuttis ///////////////////////////////////////////////////////////////////////////////////C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C转载 2015-07-22 10:32:55 · 369 阅读 · 0 评论 -
有符号数和无符号数负数
理解有符号数和无符号数负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答。 一种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切。再者,用“补码”表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算。却并没有告诉你为什么用这个公式就可以和答案?另一种是转载 2015-08-12 14:50:07 · 932 阅读 · 0 评论 -
C语言关于补码的解释及误区
加法器计算机里面,只有加法器,没有减法器,所有的减法运算,都必须用加法进行。即:减去某个数字(或者说加上某个负数)的运算,都应该研究如何用加法来完成。模、补数在日常生活当中,可以看到很多这样的事情:把某物体左转 90 度,和右转 270 度,在不考虑圈数的条件下,最终的效果是相同的;把分针倒拨 20 分钟,和正拨 40 分钟,在不考虑时针的条件下,效果也是相同的;转载 2015-08-12 15:16:16 · 2683 阅读 · 9 评论 -
vc++中debug error: Damage before/after normal block
在程序运行结束时,VC++ 6.0如果出现这样一个对话框error:Damage before normal block" alt="关于debug error:Damage before normal block" src="http://s2.sinaimg.cn/middle/67fc4f6a487118b295a71&690">就是触发了debug error: Damag转载 2015-07-21 16:05:58 · 1661 阅读 · 0 评论 -
string 与Vector 向量变量的基本操作
stringstring是一种自定义的类型,它可以方便地执行c-串所不能直接执行的一切操作。它处理的空间占用问题是自动的,需要多少,用多少,不像字符指针那样,提心吊胆于指针脱钩时的空间游离。它可以从c-串转换得到,还可以从内部“提炼”出c串........。string本身就是针对字符串操作来设计的。例如://----------------------------------------转载 2015-07-22 11:33:19 · 825 阅读 · 0 评论 -
#ifndef/#define/#endif使用详解
“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include "a.h" 和#include "c.h"此时就会造成c.h重复引用。头文件被重复引用引起的后果:有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编转载 2015-12-04 10:16:18 · 320 阅读 · 0 评论 -
Debug与Release版本的区别
Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。 Debug版本包括调试信息,所以要比Release版本大很多(可转载 2016-04-01 17:54:26 · 277 阅读 · 0 评论