![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++重要知识点
liushuiwen101423
这个作者很懒,什么都没留下…
展开
-
结构体字节对齐
结构体字节对齐结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。 计算转载 2014-09-25 11:17:10 · 316 阅读 · 0 评论 -
运算符重载
运算符重载 C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重转载 2014-09-25 09:50:21 · 414 阅读 · 0 评论 -
句柄和指针的区别和联系是什么?
句柄和指针的区别和联系是什么? 句柄和指针其实是两个截然不同的概念。 Windows系统用句柄标记系统资源,用句柄隐藏系统的信息。你只要知道有这个东西,然后去调用就行了,它是个32bit的uint。指针则标记某个物理内存地址,是不同的概念。 句柄是一种指向指针的指针。转载 2014-09-25 11:18:03 · 461 阅读 · 0 评论 -
c++程序的内存格局
c++程序的内存格局c++程序的内存格局通常分为四个区:全局数据区;代码区;栈区;堆区(即自由存储区)。 全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回地址等存放在栈区,余下的空间都被称为堆区。 new和delete,malloc和free,都从堆中分配和释放内存块,但在具体转载 2014-09-25 11:16:48 · 409 阅读 · 0 评论 -
memmove函数
memmove函数写一个函数,完成内存之间的拷贝void* mymemcpy( void *dest, const void *src, size_t count ) { char* pdest = static_castchar*>( dest ); const char* psrc = static_castconst char*>(转载 2014-09-25 11:13:13 · 574 阅读 · 0 评论 -
浅淡数组和指针
浅淡数组和指针 谢谢大牛的分享,看完后让我对数组与指针有了更深刻的理解,在此谢过!转载:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html转载 2014-09-25 11:09:09 · 384 阅读 · 0 评论 -
浅淡C/C++中的typedef和#define
浅淡C/C++中的typedef和#define在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏 定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的宏定义命令,typedef 用来为一个已有的数据类型起一个别名,而#define是用来定义一个宏定义常量。下面谈谈两者在实际使用中应当注意的地转载 2014-09-25 11:06:24 · 336 阅读 · 0 评论 -
C++ 虚函数表解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使转载 2014-09-25 11:07:13 · 345 阅读 · 0 评论 -
C/C++面试小知识点
C/C++面试小知识点1.static有什么用途。解答:在函数体中,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。也就是说,这个函数被限制在声明它的模块的本地范围内使用。转载 2014-09-25 10:59:54 · 377 阅读 · 0 评论 -
C++继承中的内存布局
C++继承中的内存布局 今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Insi转载 2014-09-25 09:54:13 · 296 阅读 · 0 评论 -
高质量软件开发之道
高质量软件开发之道 1. 学习"高质量编程"的目的是要在干活的时候一次性编写出高质量的程序,而不是当程序出错后再去修补2. 十大软件质量属性包括: 正确性(Correctness): 指软件按照需求正确执行任务的能力。正确性是第一重要的软件质量属性。 健壮性(Robustness): 指在异常情况下,软件能够正常运行。健壮性包括容错能力和恢复能力。 可靠性(Reliability): 指在一定环境转载 2014-09-25 09:58:52 · 527 阅读 · 0 评论 -
static面试
static面试面试题:static有什么作用?答:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数 一、 定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:(1) 在全局数据区内分配内存(2) 如果没有初始化,其默认值为0转载 2014-09-25 11:12:27 · 415 阅读 · 0 评论 -
static用法详解
static用法详解一. 面向过程程序设计1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include void fn(); static int n; //定义静态全局变量 void main()转载 2014-09-25 11:08:08 · 388 阅读 · 0 评论 -
如何迅速秒杀掉海量数据处理面试题
如何迅速秒杀掉海量数据处理面试题转自:http://blog.csdn.net/v_july_v/article/details/7382693前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十转载 2014-09-25 11:05:55 · 386 阅读 · 0 评论 -
C语言的谜题
C语言的谜题这几天,本站推出了几篇关于C语言的很多文章如下所示:语言的歧义 [酷壳链接] [CSDN链接]谁说C语言很简单? [酷壳链接] [CSDN链接]6个变态的C语言Hello World程序 [酷壳链接] [CSDN链接]如何加密/弄乱C源代码 [酷壳链接] [CSDN链接]C语言的谜题 [酷壳链接] [CSDN链接]我们可以看到很多C语言相关的一些东西。比如《转载 2014-09-25 11:03:52 · 351 阅读 · 0 评论 -
C语言函数指针基础
C语言函数指针基础本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础。如果你不讨厌事无巨细,请尽情阅读吧。函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具。本文将从C语言函数指针的基础开始介绍,再结合一些简单的用法和关于函数名称和地址的趣闻。在最后,本文给出一种简单的方式来看待函数指针,让你对其用法有一个更清晰的理解。转载 2014-09-25 11:01:36 · 389 阅读 · 0 评论 -
C++ 虚拟继承
C++ 虚拟继承1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继 承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如 下:class Aclass B1:public virtual A;clas转载 2014-09-25 10:55:54 · 343 阅读 · 0 评论 -
struct 与 typedef struct
struct 与 typedef struct 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typ转载 2014-09-25 10:04:22 · 287 阅读 · 0 评论 -
进制之间的转换
进制之间的转换今天翻了一本计算机基础的书籍,其中十进制、二进制、八进制、十六进制之间的转换挺有意思的,也容易犯糊涂,特温故而知新。 十进制数制系统 十进制数制系统包括 10 个数字:0、1、2、3、4、5、6、7、8、9 基为:10 逢十进一,如3+7=10,20+80=100 二进制数制系统转载 2014-09-25 10:02:54 · 344 阅读 · 0 评论 -
静态成员函数和非静态成员函数的区别?
静态成员函数和非静态成员函数的区别?一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。它们的根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针this。例如: 1 class Sc 2 { 3 public: 4 void nsfn(int a); //像声明Sc::nsfn(Sc *this , in转载 2014-09-25 10:57:00 · 403 阅读 · 0 评论 -
malloc和new有什么区别
malloc和new有什么区别malloc和new有以下不同:new、delete是操作符,可以重载,只能在c++中使用。malloc、free是函数,可以覆盖,c、c++中都可以使用。new可以调用对象的构造函数,对应的delete调用相应的析构函数。malloc仅仅负责分配内存,free仅仅回收内存,并不执行构造和析构函数。new、delete返回的是某种数据类型指针,mall转载 2014-09-25 11:15:44 · 374 阅读 · 0 评论 -
C++中指针和引用的区别
C++中指针和引用的区别 指针和引用主要有以下区别:引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。引用初始化后不能被改变,指针可以改变所指的对象。不存在指向空值的引用,但是存在指向空值的指针。注意:引用作为函数参数时,会引发一定的问题,因为让引用作参数,目的就是想改变这个引用所指向地址的内容,而函数调用时传入的是实转载 2014-09-25 11:14:25 · 434 阅读 · 0 评论 -
位运算
位运算位运算 位运算是把数字用二进制表示之后,对每一位上0或者1的运算。 理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。在程序员的圈子里有一个流传了很久的笑话,说世界上有10种人,一种人知道二进制,而另一种人不知道二进制。。。。。。 其实二进制的运算并不是很难掌握,因为位运算总共只有5种运算:与、或、异或、左移转载 2014-09-25 09:54:29 · 295 阅读 · 0 评论 -
static_cast ,reinterpret_cast
static_cast ,reinterpret_cast用法:static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换转载 2014-09-25 09:49:36 · 517 阅读 · 0 评论 -
成员以其在类中声明的顺序构造
成员以其在类中声明的顺序构造 分析以下代码的输出:12345678910111213141516171819#includeusing namespace std; c转载 2014-09-25 09:42:08 · 446 阅读 · 0 评论 -
strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数strcpy函数:char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL)); char *address = Dest; wh转载 2014-09-25 11:12:20 · 650 阅读 · 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转载 2014-09-25 11:11:41 · 372 阅读 · 0 评论 -
C++重要知识点小结
C++重要知识点小结---11.C++中类与结构的唯一区别是:类(class)定义中默认情况下的成员是private的,而结构(struct)定义中默认情况下的成员是public的。2. ::叫作用域区分符,指明一个函数属于哪个类或一个数据属于哪个类。::可以不跟类名,表示全局数据或全局函数(即非成员函数)。3.类名加载成员函数名之前而不是加在函数的返回类型前。错误:Tdate转载 2014-09-25 10:49:04 · 439 阅读 · 0 评论 -
C++类的静态成员详细讲解
C++类的静态成员详细讲解在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文转载 2014-09-25 09:56:51 · 280 阅读 · 0 评论 -
C++中引用的本质是什么?
C++中引用的本质是什么?一般的教材上讲到引用时,都是说“引用是对象的一个别名”。我认为这种定义是不清晰的,不利于初学者理解引用。至少我自己曾经被这个定义困扰了一段时间。到底什么是“别名”? 实际上,引用的实质是位于xxxxxx地址上的一个xxxx类型的对象。比如教科书上常用的例子: int a = 5; //不妨假设编译器将a分配到0x400000转载 2014-09-25 10:58:23 · 480 阅读 · 0 评论 -
C语言内存地址基础
C语言内存地址基础从计算机内存的角度思考C语言中的一切东东,是挺有帮助的。我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节。比方说我们的电脑有 4K 内存,那这个内存数组将会有 4096 个元素。当我们谈论一个存储地址的指针时,就当相于我们在谈论一个存储着该内存数组某个元素索引的指针。逆向引用某个指针,将会得到数组中该索引所指向的 值。这一切当然都是谎言。操作转载 2014-09-25 11:00:47 · 381 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别 堆和栈的区别 一般认为在c中分为这几个存储区 1栈 - 有编译器自动分配释放 2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收转载 2014-09-25 11:13:35 · 348 阅读 · 0 评论 -
内存泄露
内存泄露 1.简介 在计算机科学中,内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习转载 2014-09-25 11:14:46 · 409 阅读 · 0 评论 -
C++拷贝构造函数
C++拷贝构造函数 拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。调用拷贝构造函数的情形在C++中,下转载 2014-09-25 10:59:10 · 427 阅读 · 0 评论 -
C++内存管理学习堆和栈
C++内存管理学习堆和栈 来源:http://c.chinaitlab.com/basic/936306_2.html 一 C++内存管理1.内存分配方式 在讲解内存分配之前,首先,要了解程序在内存中都有什么区域,然后再详细分析各种分配方式。 1.1 C语言和C++内存分配区 下面的三张图,图1图2是一种比较详细的C语言的内存区域分法。图3是典型的C转载 2014-09-25 10:57:36 · 329 阅读 · 0 评论 -
虚继承的内存模型分析
虚继承的内存模型分析 这里就先从以下几个点进行说明吧: 虚继承和虚基类vs2010下的cl命令内存模型 虚继承和虚基类 虚继承:在继承定义中包含了virtual关键字的继承关系; 虚基类:在虚继承体系中的通过virtual继承而来的基类,需要注意的是:class CSubClass : public virtual CBase {}; 其转载 2014-09-25 09:53:22 · 529 阅读 · 0 评论 -
C/C++ 语言中的表达式求值
C/C++ 语言中的表达式求值 在此,首先向裘老师致敬!裘宗燕:C/C++ 语言中的表达式求值经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout C++转载 2014-09-25 09:53:03 · 460 阅读 · 0 评论 -
qsort(),sort()排序函数
qsort(),sort()排序函数 一.qsort()函数功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数: 1 待排序数组首地址 2 数组中待排序元素数量转载 2014-09-25 09:46:59 · 521 阅读 · 0 评论 -
sizeof和strlen的区别
sizeof和strlen的区别第一个例子: char *ss="0123456789"; sizeof(ss)=4, ss是指向字符串常量的字符指针。 sizeof(*ss)=1, *ss是第一个字符。第二个例子: char ss[]="0123456789"; sizeof(ss)=11, ss是数组,计算到“\0”位置,因此是(10+1)。转载 2014-09-25 11:18:34 · 375 阅读 · 0 评论 -
memset函数使用方法
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。需要的头文件在C中 在C++中 更详细的解说见百度百科 --> http://baike.baidu.com/view/982208.htm 1. void *memset(void *s,int转载 2014-09-25 09:43:54 · 402 阅读 · 0 评论