当前位置:   article > 正文

C/C++重要知识点_c++双冒号 访问类的私有成员

c++双冒号 访问类的私有成员
摘要: 分析以下代码的输出:#includeusing namespace std;class A{public: A(int j):age(j) , num(age + 1) { cout<<"age:"<<age<<",num:"<<num<<endl; }protected: int num; int age;};void main(){ A sa(15);}运行结果:age:15 , num:2(num为一个随机数)由于按成员在类定义中的声明顺序进行构造,而不是按构造函数说明中冒号后面的顺序,所 阅读全文
posted @  2013-11-12 16:58 夏雪冬日 阅读(119) |  评论 (0)  编辑
memset函数使用方法
摘要: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。需要的头文件在C中 在C++中 更详细的解说见百度百科 -->http://baike.baidu.com/view/982208.htm1. void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2。例子void main(){char *s="Golden Global View";clrscr();memset(s, 阅读全文
posted @  2013-11-12 15:10 夏雪冬日 阅读(91) |  评论 (0)  编辑
qsort(),sort()排序函数
摘要: 一.qsort()函数功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序qsort(即,quicksort)主要根据你给的比较条件给一个快速排序,主要是通过指针移动实现排序功能。排序之后的结果仍然放在原来数组中。其中qsort和compare的用法如下:void qs... 阅读全文
posted @  2013-11-03 09:56 夏雪冬日 阅读(1193) |  评论 (0)  编辑
C++命名规则
摘要: 如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。活跃在生物学、化学、军队、监狱、黑社会、恐怖组织等各个领域内的大量有识先辈们都曾经无数次地以实际行动证明了以上公理的正确性。除了上帝(设它可以改变世间万物的秩序)以外,相信没人有实力对它不屑一顾。在软件开发这一高度抽象而且十分复杂的活动中,命名规则的重要性更显得尤为突出。一套定义良好并且完整的、在整个项目中统一使用的命名规范将大大提升源代码的可读性和软件的可维护性。在引入细节之前,先说明一下命名规范的整体原则:同一性在编写一个子模块或派生类的时候,要遵循其基类或整体模 阅读全文
posted @  2013-10-11 10:44 夏雪冬日 阅读(225) |  评论 (1)  编辑
static_cast ,reinterpret_cast
摘要: 用法:static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。③把空指针转换成目标类型的空指针。④把任何类型的表达式转换成void类型。注意:stat. 阅读全文
posted @  2013-10-10 17:05 夏雪冬日 阅读(113) |  评论 (0)  编辑
运算符重载
摘要: C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下: operator (){ } 运算符重载时... 阅读全文
posted @  2013-10-06 21:21 夏雪冬日 阅读(154) |  评论 (0)  编辑
C/C++ 语言中的表达式求值
摘要: 在此,首先向裘老师致敬!裘宗燕:C/C++语言中的表达式求值经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m=1;n=m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout << a++ << a;C++不是规定<<操作左结合吗?是C++书上写错了,还是这个系统的实现有问题?注:运行a = 4; cout << a++ << a;如在Visual c++ 6.0中,得到的是4和4;在Visual Studio中,得到的是4 阅读全文
posted @  2013-09-26 10:31 夏雪冬日 阅读(350) |  评论 (0)  编辑
C++继承中的内存布局
摘要: 今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Object Model虽然是一本好书,然而,书的篇幅多一些,又和具体的VC++关系小一些。因此,从篇幅和内容来看,译者认为本文是深入理解C++对象模型比较好的一个出发点。这篇文章以前看到时就觉得很好,旧文重读,感觉理解得更多一些了,于是产 阅读全文
posted @  2013-09-22 14:32 夏雪冬日 阅读(469) |  评论 (2)  编辑
虚继承的内存模型分析
摘要: 这里就先从以下几个点进行说明吧:虚继承和虚基类vs2010下的cl命令内存模型 虚继承和虚基类 虚继承:在继承定义中包含了virtual关键字的继承关系; 虚基类:在虚继承体系中的通过virtual继承而来的基类,需要注意的是:class CSubClass : public virtual CBase {}; 其中CBase称之为CSubClass的虚基类,而不是说CBase就是个虚基类,因为CBase还可以不不是虚继承体系中的基类。 vs2010下的cl命令 微软的VS2010提供了一个新的选项,给用户显示C++对象在内存中的布局。这个选项就是:[cpp] view plainco... 阅读全文
posted @  2013-09-22 10:37 夏雪冬日 阅读(147) |  评论 (0)  编辑
位运算
摘要: 位运算 位运算是把数字用二进制表示之后,对每一位上0或者1的运算。 理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。在程序员的圈子里有一个流传了很久的笑话,说世界上有10种人,一种人知道二进制,而另一种人不知道二进制。。。。。。 其实二进制的运算并不是很难掌握,因为位运算总共只有5种运算:与、或、异或、左移、右移。如下表:与(&)0 & 0 = 01 & 0 = 00 & 1 = 01 & 1 = 1或(|)0 | 0 = 01 | 0 = 10 | 1 = 11 | 1 = 1异或(^)0 ^ 阅读全文
posted @  2013-09-09 22:36 夏雪冬日 阅读(1349) |  评论 (2)  编辑
C++类的静态成员详细讲解
摘要: 在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象。希望阅读本文可以使读者对类的静态成员变量和成员函数有更为深刻的认识。第一个例子,通过类名调用静态成员函数和非静态成员函数[cpp] view plaincopyclass 阅读全文
posted @  2013-09-02 14:02 夏雪冬日 阅读(369) |  评论 (6)  编辑
需要友元的原因及使用
摘要: 有时候,普通函数需要直接访问一个类的保护或私有数据成员。如果没有友元机制,则只能将类的数据成员声明为公共的,从而,任何函数都可以无约束的访问它。普通函数需要直接访问类的保护或私有数据成员的原因主要是为提高效率。在类里声明一个普通函数,标上关键字friend,就成了该类的友元,可以访问该类的一切成员。需要友元的另一个原因是为了方便重载操作符的使用。友元函数不是成员函数,它是类的朋友,因而能够访问类的全部成员。在类的内部,只能声明它的函数原型,加上friend关键字。友元声明的位置可以在类的任何部位,既可在public区,也可在protected区,意义完全一样。友元函数定义则在类的外部,一般与类 阅读全文
posted @  2013-08-31 17:01 夏雪冬日 阅读(88) |  评论 (0)  编辑
高质量软件开发之道
摘要: 1. 学习"高质量编程"的目的是要在干活的时候一次性编写出高质量的程序,而不是当程序出错后再去修补2. 十大软件质量属性包括:正确性(Correctness): 指软件按照需求正确执行任务的能力。正确性是第一重要的软件质量属性。健壮性(Robustness): 指在异常情况下,软件能够正常运行。健壮性包括容错能力和恢复能力。可靠性(Reliability): 指在一定环境下,在给定的时间内,系统不发生故障的概率。性能(Performance): 通常是指软件的时空效率。程序员可通过优化数据结构、算法和代码来提高软件的性能。易用性(Usability): 指用户使用软件的容易 阅读全文
posted @  2013-08-30 19:42 夏雪冬日 阅读(44) |  评论 (0)  编辑
进制之间的转换
摘要: 今天翻了一本计算机基础的书籍,其中十进制、二进制、八进制、十六进制之间的转换挺有意思的,也容易犯糊涂,特温故而知新。十进制数制系统十进制数制系统包括10个数字:0、1、2、3、4、5、6、7、8、9基为:10逢十进一,如3+7=10,20+80=100二进制数制系统计算机中使用二进制表示数据二进制包括两个符号:0和1二进制逢二进一:(1+1)2=(10)2二进制的基为2示例:1000101100101101八进制数制系统用于缩短二进制的数字长度八进制基是8,使用的符号为:0、1、2、3、4、5、6、7逢八进一,即(7+1)8=(10)8十六进制数制系统十六进制数制系统的基是16十进制:0、1、 阅读全文
posted @  2013-08-27 16:50 夏雪冬日 阅读(52) |  评论 (0)  编辑
struct 与 typedef struct
摘要: 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。2. typedef & 结构的问题 当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?请你先猜想一下,然后看下文说明:typedef struct tagNode{  阅读全文
posted @  2013-08-23 18:48 夏雪冬日 阅读(62) |  评论 (0)  编辑
C++重要知识点小结---3
摘要: C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.htmlC++重要知识点小结---2:http://www.cnblogs.com/heyonggang/p/3253036.html1.什么是智能指针?智能指针是一个行为类似指针但也提供其他功能的类。智能指针类实现普通指针行为的类的区别在于:智能指针通常接收指向动态分配对象的指针并负责删除该对象。用户分配对象,但由智能指针类删除它,因此智能指针类需要实现复制控制成员来管理指向共享对象的指针。只有在撤销了指向共享对象的最后一个智能指针后,才能删除该共享对象。使用计数是实现智能指 阅读全文
posted @  2013-08-14 17:03 夏雪冬日 阅读(117) |  评论 (0)  编辑
C++ 虚拟继承
摘要: 1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继 承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如 下:class Aclass B1:public virtual A;class B2:public virtual A;class D:public B1,public B2;虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用,而一旦离开了多重继承,虚拟继承就 阅读全文
posted @  2013-08-13 15:03 夏雪冬日 阅读(113) |  评论 (0)  编辑
C++重要知识点小结---2
摘要: C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继承。这种类成为抽象类。一个抽象类至少具有一个纯虚函数。所谓纯虚函数是指被标明为不具体实现的虚成员函数。如:virtual void WithDrawal(float amount) = 0; //纯虚函数在WithDrawal()的声明之后的“=0”表明程序员将不定义该函数。该声明是为派生类而保留的位置。一个抽象类不能有实例对象,即不能由该类抽象来制造一个对象。纯虚函数是在基类中为子类保留的一个位. 阅读全文
posted @  2013-08-12 15:39 夏雪冬日 阅读(203) |  评论 (0)  编辑
静态成员函数和非静态成员函数的区别?
摘要: 一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。它们的根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针this。例如: 1 class Sc 2 { 3 public: 4 void nsfn(int a); //像声明Sc::nsfn(Sc *this , int a); 5 static void sfn(int a); // 无this指针 6 //.... 7 }; 8 9 void f(Sc &s)10 {11 s.nsfn(10); // 转换为Sc::nsfn(&s , 10)12 ... 阅读全文
posted @  2013-08-12 10:58 夏雪冬日 阅读(1271) |  评论 (0)  编辑
C++内存管理学习堆和栈
摘要: 来源:http://c.chinaitlab.com/basic/936306_2.html 一 C++内存管理1.内存分配方式 在讲解内存分配之前,首先,要了解程序在内存中都有什么区域,然后再详细分析各种分配方式。1.1 C语言和C++内存分配区 下面的三张图,图1图2是一种比较详细的C语言的内存区域分法。图3是典型的C++内存分布图,简单易懂;以下内存分配图,区别就是图1和2则分为初始化和未初始化静态变量区,图3中是全局变量区。 C语言(图1和图2):(由低地址到高地址) a)正文段:用来存放程序执行代码。通常,正文段是可共享的。另外,正文段常常是只读的,一次防止程序由于意外修改其... 阅读全文
posted @  2013-08-10 16:15 夏雪冬日 阅读(135) |  评论 (0)  编辑
C++中引用的本质是什么?
摘要: 一般的教材上讲到引用时,都是说“引用是对象的一个别名”。我认为这种定义是不清晰的,不利于初学者理解引用。至少我自己曾经被这个定义困扰了一段时间。到底什么是“别名”? 实际上,引用的实质是位于xxxxxx地址上的一个xxxx类型的对象。比如教科书上常用的例子: int a = 5; //不妨假设编译器将a分配到0x400000 int &b = a; 这里面b的准确意义就是,放在0x400000地址上的一个int类型对象。这里面包括了两重含义,首先b是一个int类型对象,因此他的使用完全与 int类型对象一样。另外这个int类型对象的地址是0x400000,因此从底层来看,它具有指针的一 阅读全文
posted @  2013-08-10 15:55 夏雪冬日 阅读(69) |  评论 (0)  编辑
C++拷贝构造函数
摘要: 拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。调用拷贝构造函数的情形在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):1) 一个对象作为函数参数,以值传递的方式传入函数体;2) 一个对象作为函数返回值,以值传递的方式从函数返回;3) 一个对象用于给另外一个对象进行初始化(常称为复制初始化); 如果在前两. 阅读全文
posted @  2013-08-10 14:58 夏雪冬日 阅读(87) |  评论 (0)  编辑
C++重要知识点小结---1
摘要: 1.C++中类与结构的唯一区别是:类(class)定义中默认情况下的成员是private的,而结构(struct)定义中默认情况下的成员是public的。2. ::叫作用域区分符,指明一个函数属于哪个类或一个数据属于哪个类。::可以不跟类名,表示全局数据或全局函数(即非成员函数)。3.类名加载成员函数名之前而不是加在函数的返回类型前。错误:Tdate::void Set(int m , int d , int y) {}正确: void Tdate::Set(int m , int d , int y) {}4.一个类对象所占据的内存空间由它的数据成员所占据的空间总和所决定。类的成员函数不占据 阅读全文
posted @  2013-08-08 20:57 夏雪冬日 阅读(312) |  评论 (0)  编辑
C/C++面试小知识点
摘要: 1.static有什么用途。解答:在函数体中,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。也就是说,这个函数被限制在声明它的模块的本地范围内使用。2.引用与指针有什么区别?解答:引用必须被初始化,指针不必。引用初始化后不能被改变,指针可以改变所指的对象。不存在指向空值的引用,但是存在指向空值的指针。3.写出float x与“零值”比较的if语句。if(x > 0.000001 & 阅读全文
posted @  2013-08-06 18:59 夏雪冬日 阅读(128) |  评论 (0)  编辑
C语言内存地址基础
摘要: 来源:http://blog.jobbole.com/44845/从计算机内存的角度思考C语言中的一切东东,是挺有帮助的。我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节。比方说我们的电脑有 4K 内存,那这个内存数组将会有 4096 个元素。当我们谈论一个存储地址的指针时,就当相于我们在谈论一个存储着该内存数组某个元素索引的指针。逆向引用某个指针,将会得到数组中该索引所指向的 值。这一切当然都是谎言。操作系统对内存的管理要远比这复杂。内存不一定连续,也不一定按顺序处理。但前面的类比是一种讨论C语言内存的简单方式。如果对『指针』、『地址』和『逆向引用』感到混乱,请看《C语 阅读全文
posted @  2013-08-06 18:39 夏雪冬日 阅读(43) |  评论 (0)  编辑
C语言函数指针基础
摘要: 来源:http://blog.jobbole.com/44639/本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础。如果你不讨厌事无巨细,请尽情阅读吧。函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具。本文将从C语言函数指针的基础开始介绍,再结合一些简单的用法和关于函数名称和地址的趣闻。在最后,本文给出一种简单的方式来看待函数指针,让你对其用法有一个更清晰的理解。函数指针和一个简单的函数我们从一个非常简单的”Hello World“函数入手,来见识一下怎样创建一个函数指针。1234567891011121314#include // 函数原型 阅读全文
posted @  2013-08-06 18:37 夏雪冬日 阅读(33) |  评论 (0)  编辑
转载:C语言的谜题
摘要: 转载:http://coolshell.cn/articles/945.html这几天,本站推出了几篇关于C语言的很多文章如下所示:语言的歧义 [酷壳链接] [CSDN链接]谁说C语言很简单? [酷壳链接] [CSDN链接]6个变态的C语言Hello World程序 [酷壳链接] [CSDN链接]如何加密/弄乱C源代码 [酷壳链接] [CSDN链接]C语言的谜题 [酷壳链接] [CSDN链接]我们可以看到很多C语言相关的一些东西。比如《语言的歧义》主要告诉了大家C语言中你意想不到的错误以及一些歧义上的东西。而《谁说C语言很简单》 则通过一些看似你从来不可能写出的代码来告诉大家C语言并不是一件容 阅读全文
posted @  2013-08-03 18:38 夏雪冬日 阅读(17) |  评论 (0)  编辑
转载:如何迅速秒杀掉海量数据处理面试题
摘要: 转自:http://blog.csdn.net/v_july_v/article/details/7382693教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后,有一点必须强. 阅读全文
posted @  2013-08-02 09:04 夏雪冬日 阅读(163) |  评论 (0)  编辑
转载:C++ 虚函数表解析
摘要: 目录(?)[+]转载:http://blog.csdn.net/haoel/article/details/1948051#前言C++中 的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术 可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现 阅读全文
posted @  2013-07-19 10:19 夏雪冬日 阅读(39) |  评论 (0)  编辑
浅淡C/C++中的typedef和#define
摘要: 在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏 定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的宏定义命令,typedef 用来为一个已有的数据类型起一个别名,而#define是用来定义一个宏定义常量。下面谈谈两者在实际使用中应当注意的地方。1.typedef关键字 typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性。它可以为一串很长的类型名起一个别名,那么使用这个别名可以达到与原类型名相同的效果。 如:typedef int INT;typ 阅读全文
posted @  2013-07-18 20:24 夏雪冬日 阅读(76) |  评论 (0)  编辑
浅淡数组和指针
摘要: 谢谢大牛的分享,看完后让我对数组与指针有了更深刻的理解,在此谢过!转载:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html http://www.cnblogs.com/dolphin0520/archive/2011... 阅读全文
posted @  2013-07-18 19:46 夏雪冬日 阅读(58) |  评论 (0)  编辑
static用法详解
摘要: 一. 面向过程程序设计1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: [cpp] view plaincopy//Example1 #include voidfn(); staticintn;//定义静态全局变量 voidmain() {n=20; cout voidfn(); staticintn;//定义静态全局变量 voidmain() {n=20; cout externintn; voidfn() {n++; cout voidfn(); voidmain() ... 阅读全文
posted @  2013-07-18 16:07 夏雪冬日 阅读(97) |  评论 (0)  编辑
结构体、共用体
摘要: 1 #include 2 union 3 { 4 int i; 5 char x[2]; 6 }a; 7 8 void main() 9 { 10 a.x[0] = 10; 11 a.x[1] = 1; 12 printf("%d",a.i); 13 } 14 答案:266 15 16 x86的机器,小端字节序, 17 x[0]=0x0a x[1] = 0x01 18 19 则i就是0x0000010a 20 21 结果就是266. 共用体和结构体的区别在于:结构体的每个域都有它自己的存储空间;共用体所有域共用一个存储空间。... 阅读全文
posted @  2013-07-18 10:45 夏雪冬日 阅读(55) |  评论 (0)  编辑
strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
摘要: strcpy函数:[cpp] view plaincopychar*strcpy(char*Dest,constchar*Src){assert((Dest!=NULL)&&(Src!=NULL));char*address=Dest;while((*Dest++=*Src++)!='\0')NULL;returnaddress;}strncpy函数:利用标准库函数strncpy(),可以将一字符串的一部分拷贝到另一个字符串中。strncpy()函数有3个参数:第一个参数是目录字符串;第二个参数是源字符串;第三个参数是一个整数,代表要从源字符串拷贝到目标字符串中 阅读全文
posted @  2013-07-17 21:40 夏雪冬日 阅读(804) |  评论 (0)  编辑
memmove函数
摘要: 写一个函数,完成内存之间的拷贝[cpp] view plaincopyvoid*mymemcpy(void*dest,constvoid*src,size_tcount){char*pdest=static_cast(dest);constchar*psrc=static_cast(src);if(pdest>psrc&&pdest 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域可以重叠,但复制后src内容会被更改。函数返回指向dest的指针。 memmove和memcpy的区别:1.memmove函数原型:vo 阅读全文
posted @  2013-07-17 20:53 夏雪冬日 阅读(87) |  评论 (0)  编辑
strcpy函数和strncpy函数的区别
摘要: strcpy函数和strncpy函数的原型介绍在我的另一篇文章中介绍了,见strcpy,strncpy,strlen等函数原型strcpy:字串复制 原型:char *strcpy(char *dest, char *src); 功能:把src所指由'\0'结束的字符串复制到dest所指的数组中。 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。 注意:当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。 因此会导致dest栈空间溢出以致产生崩溃异常。 阅读全文
posted @  2013-07-17 20:50 夏雪冬日 阅读(591) |  评论 (0)  编辑
strcpy函数
摘要: 1 #include 2 #include 5 void myStrcpy(char* Dest, const char *Src) 6 { 7 assert((Dest!= NULL)&&(Src!=NULL)); 8 while((*Dest = *Src)!='\0') 9 {10 Dest++;11 Src++;12 }13 }14 15 int main()16 {17 char dest[] = "helloworld";//注意18 char* src = "hello";19 mySt... 阅读全文
posted @  2013-05-07 16:15 夏雪冬日 阅读(32) |  评论 (0)  编辑
C++重点知识
摘要: 来源:http://www.cnblogs.com/lzjsky/archive/2011/01/18/1938507.html2. 什么是“引用”?申明和使用“引用”要注意哪些问题? 答:引用就是某个目标变量的“别名”(alias),对引用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完 毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引 用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引 阅读全文
posted @  2013-04-25 14:43 夏雪冬日 阅读(98) |  评论 (0)  编辑
static面试
摘要: 面试题:static有什么作用?答:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数一、 定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:(1) 在全局数据区内分配内存(2) 如果没有初始化,其默认值为0(3) 该变量在本文件内从定义开始到文件结束可见二、 定义局部静态变量:在局部静态变量前面加上关键字static,该局部变量便成了静态局部变量。静态局部变量有以下特点:(1) 该变量在全局数据区分配内存(2) 如果不显示初始化,那么将被隐式初始化为0(3) 它始终驻留在全局数据区,直到程序运... 阅读全文
posted @  2012-12-13 21:13 夏雪冬日 阅读(115) |  评论 (0)  编辑
内存泄露
摘要: 1.简介 在计算机科学中,内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,严格意义上来说这是不准确的。 一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程... 阅读全文
posted @  2012-12-13 11:29 夏雪冬日 阅读(69) |  评论 (0)  编辑
堆和栈的区别
摘要: 堆和栈的区别 一般认为在c中分为这几个存储区 1栈 - 有编译器自动分配释放 2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4另外还有一个专门放常量的地方。 - 程序结束释放 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分 配得到的就是在堆上。在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数. 阅读全文
posted @  2012-12-13 09:39 夏雪冬日 阅读(53) |  评论 (0)  编辑
C++中指针和引用的区别
摘要: 指针和引用主要有以下区别:引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。引用初始化后不能被改变,指针可以改变所指的对象。不存在指向空值的引用,但是存在指向空值的指针。注意:引用作为函数参数时,会引发一定的问题,因为让引用作参数,目的就是想改变这个引用所指向地址的内容,而函数调用时传入的是实参,看不出函数的参数是正常变量,还是引用,因此可能引发错误。所以使用时一定要小心谨慎。从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独 阅读全文
posted @  2012-12-13 09:37 夏雪冬日 阅读(62) |  评论 (0)  编辑
c++程序的内存格局
摘要: c++程序的内存格局通常分为四个区:全局数据区;代码区;栈区;堆区(即自由存储区)。 全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回地址等存放在栈区,余下的空间都被称为堆区。new和delete,malloc和free,都从堆中分配和释放内存块,但在具体操作上两者有很大的区别。详细的内存分配情况见:http://www.cnblogs.com/heyonggang/p/3250220.html根据《C++内存管理技术内幕》一书,在C++中,内存分成5个区,他们分别是堆,栈,自由存续区,全局/静态存续区,常量存续区 阅读全文
posted @  2012-12-11 22:26 夏雪冬日 阅读(88) |  评论 (0)  编辑
malloc和new有什么区别
摘要: malloc和new有以下不同:new、delete是操作符,可以重载,只能在c++中使用。malloc、free是函数,可以覆盖,c、c++中都可以使用。new可以调用对象的构造函数,对应的delete调用相应的析构函数。malloc仅仅负责分配内存,free仅仅回收内存,并不执行构造和析构函数。new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。注意:malloc申请的内存空间要用free释放,而new申请的内存空间要用delete释放,不要混用。因为两者实现的机理不同。有了malloc/free为什么还要new/delete?malloc/free是 阅读全文
posted @  2012-12-11 22:23 夏雪冬日 阅读(60) |  评论 (0)  编辑
sizeof和strlen的区别
摘要: 第一个例子: char *ss="0123456789"; sizeof(ss)=4,ss是指向字符串常量的字符指针。 sizeof(*ss)=1,*ss是第一个字符。第二个例子: char ss[]="0123456789";sizeof(ss)=11, ss是数组,计算到“\0”位置,因此是(10+1)。 sizeof(*ss)=1,*ss是第一个字符。第三个例子: char ss[100]="0123456789";sizeof(ss)=100, ss表示在内存中预分配的大小,100*1。strlen(ss)=10,它的内部是用 阅读全文
posted @  2012-12-11 22:23 夏雪冬日 阅读(62) |  评论 (1)  编辑
结构体字节对齐
摘要: 结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。 计算结构变量的大小必须讨论数据对齐的问题。为了使CPU存取的速度最快(这同CPU取数操作有关),c++在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。这样做可能会浪费一些内存,但在理论上CP 阅读全文
posted @  2012-12-11 08:57 夏雪冬日 阅读(591) |  评论 (4)  编辑
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/630672
推荐阅读
相关标签
  

闽ICP备14008679号