![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 66
wangzhiqing3
学生
展开
-
随笔2012-12-23
1. malloc 函数原理:函数原型:extern void *malloc(unsigned int num_bytes);原理:malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下原创 2012-12-23 20:22:29 · 481 阅读 · 0 评论 -
c++ this pointer
先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指针转载 2013-06-04 23:00:20 · 934 阅读 · 0 评论 -
c++ static
一、首先介绍以下全局变量、局部变量、静态局部变量、静态全局变量: C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。原创 2013-05-24 08:11:42 · 637 阅读 · 0 评论 -
struct与class的区别
讨论一下结构(struct)与类(class)的区别,你认为结构(struct)有些什么作用,可以完全用类(class)取代么?? --------------------------------------------------------------- 问的人太多,干脆整理个FAQ吧。 首先,讨论这个问题应该仅从语法上讨论,如果讨论不同人之间编程风格上的差异,那这个问题是没有原创 2013-08-22 15:40:16 · 492 阅读 · 0 评论 -
结构体对齐详解
1 -- 结构体数据成员对齐的意义许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的起始地址的值是某个数k的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。这种强制的要求一来简化了处理器与内存之间传输系统的设计,二来可以提升读取数据的速度。比如这么一种处理器,它每次读写内存的时候都从某个8倍数的地址开始,一次转载 2013-08-11 20:31:30 · 522 阅读 · 0 评论 -
sizeof
文字是转载的,图是原创的。1、空类的sizeof是1。空类是指没有成员的类,类中的函数不占空间,除非是虚函数。[cpp] view plaincopyclass A { public: A(){} ~A(){} void fun(){} };原创 2013-08-25 17:10:09 · 630 阅读 · 0 评论 -
C++浅拷贝和深拷贝的区别
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include iostream>using namespace std;class CExample {private: int a;pu转载 2013-08-28 18:47:53 · 599 阅读 · 0 评论 -
c++ 公有继承/私有继承/保护继承
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被原创 2013-08-31 23:20:46 · 595 阅读 · 0 评论 -
string函数原型
class String{public: String(const char *str = NULL); // 普通构造 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数p原创 2013-08-31 16:07:50 · 729 阅读 · 0 评论 -
c++ 模板
1.模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float转载 2013-08-31 19:03:04 · 483 阅读 · 0 评论 -
typedef 与 typedef struct
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是原创 2013-09-02 14:56:04 · 784 阅读 · 0 评论 -
struct stat 作用
stat,lstat,fstat1 函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。函数原型#include int stat(const char *restrict pathname, struct stat *restrict buf);提供文件名字,获取文件对应属性。int fstat(int filedes, struct stat *buf);通过文件原创 2013-10-06 13:14:11 · 3523 阅读 · 0 评论 -
c++ extern c的作用
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不原创 2013-10-06 08:01:13 · 3296 阅读 · 0 评论 -
c++ union的使用
联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!1、什么是联合?“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”原创 2013-10-08 21:00:49 · 3636 阅读 · 0 评论 -
josephus问题
看书上写的很蛋疼,好好的一个问题,不描述清楚,你妹程序怎么写!!! josephus问题:Josephus问题:设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列, 然后从出列的下一个人重新开始报数,数到第m的人又出列……如此反复直到所有的人全部 出列为止。Josephus问题是:对于任意给定的n,s,m,求出按出列次序得到的n个人员的序列。#in原创 2013-06-03 19:07:12 · 1275 阅读 · 0 评论 -
realloc,malloc,calloc的区别
Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from the other.Both the malloc() and the calloc() functions are used to allocat转载 2013-05-15 18:58:32 · 568 阅读 · 0 评论 -
vector size()/resize() reverse()/capacity()
OK, 话说序列式容器, 两个问题: Q1. 当前容器有多少个元素?Q2. 怎样重设容器的元素个数? A1: You know, 所有的STL容器都提供了size()这个操作函数,返回当前容器的元素个数. (参考 C++标准程序库自修教程与参考手册 P146).A2: vector, deque和list都提供了resize()这个函数来重设元素个数. 对于新增加的元素转载 2013-05-13 14:30:39 · 743 阅读 · 0 评论 -
c++ virtual详解
Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函数而不是Ba原创 2013-01-18 19:47:19 · 407 阅读 · 0 评论 -
GCC编译器参数
除了最简单的运行gcc/g++ filename(这样只能运行最简单的小程序)外,GCC都需要用各种选项来实现其强大的功能。下面是GCC的一些常用选项描述:生成特定格式的文件:-E 只激活预处理,但不生成文件,需要把它重定向到一个输出文件里面。例子: gcc -E hello.c > pianoapan.txt gcc -E he原创 2013-01-21 11:04:13 · 496 阅读 · 0 评论 -
转换为const 对象
当使用非 const 对象初始化 const 对象的引用时,系统将非 const 对象转换为 const 对象。此外,还可以将非 const 对象的地址(或非 const 指针)转换为指向相关 const 类型的指针:int i;const int ci = 0;const int &j = i; // ok: convert non-const to reference to原创 2013-04-23 18:46:43 · 1256 阅读 · 0 评论 -
explicit修饰构造函数
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”); 但是有原创 2013-04-24 20:17:16 · 598 阅读 · 0 评论 -
系统调用跟我学(3)
系统调用跟我学(3)进程管理相关的系统调用之二雷镇 (leicool@21cn.com) 简介: 本文介绍了Linux下的进程的一些概念,并着重讲解了与Linux进程管理相关的重要系统调用wait,waitpid和exec函数族,辅助一些例程说明了它们的特点和使用方法。发布日期: 2002 年 8 月 09 日 级别: 初级 访问情况 : 9490 次浏转载 2013-04-28 11:52:58 · 572 阅读 · 0 评论 -
linux system返回值
[cpp] view plaincopystatus = system("./test.sh"); 1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。转载 2013-04-28 11:51:54 · 755 阅读 · 0 评论 -
模板的概念
我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float max( float转载 2013-05-16 19:02:15 · 571 阅读 · 0 评论 -
C++中const、volatile、mutable的用法
const、volatile、mutable的用法const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。例如:co原创 2013-05-16 19:22:08 · 591 阅读 · 0 评论 -
new(std::nothrow) 应用场景
C++ 中 std::nothrow 有什么样的应用场景呢知乎已经不好玩了,不是你长篇大论就能留…对于比较健壮的代码来说,nothrow使用的情况比直接new多很多吧。直接new如果失败要抛出异常的,结果就是为了健壮性代码里到处都是try。所以一般健壮的分配方式都用new (nothrow) xxx的(当然也有用malloc等的),之后判断N原创 2013-05-16 19:32:42 · 1306 阅读 · 0 评论 -
struct结构体与构造函数
今天看数据结构时,突然看到一个用构造函数进行初始化的struct结构体,这个比较新鲜,因为以前从来没有看到过,于是想了想struct到底有没有构造函数以及struct如何初始化,上网查了一些资料,供大家参考!结构体实例(包括共用体)和类实例的初始化方法完全相同,二者都可以应用于继承层次中。不同点是结构体(包括共用体)默认成员为public,而类默认成员是private型的。一、若类和结转载 2013-05-10 16:58:59 · 1231 阅读 · 0 评论 -
关于递推算法的一些想法
如走电梯,一次可以走一步,也可以走两步,n阶电梯可以的走法:#include using namespace std;in fn(int n){ if(n == 1) return 1; if(n == 2) return 2; else return fn(n-1)+fn(n-2);}i原创 2013-05-25 11:19:49 · 704 阅读 · 0 评论 -
vector::clear()
原型:#include void clear();函数clear()删除储存在vector中的所有元素. 如果vector的元素是一些object,则它将为当前储存的每个元素调用它们各自的析构函数(destructor). 然而, 如果vector储存的是指向对象的指针,此函数并不会调用到对应的析构函数. 在第二种情况下, 为了完全删除vector中的元素则应使用一个类似于下的循环:原创 2013-05-13 15:21:36 · 917 阅读 · 0 评论 -
delete /delete[]
一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回原创 2013-05-13 15:26:20 · 597 阅读 · 0 评论 -
vim中ctags使用
这两天看到网上有将vim 改造成功能强大的IDE的blog,突然心血来潮,亲身经历了一下。网友的帖子都不错,我这里只是将各种插件分开罗列,然后加上一些使用技巧。希望本文对你有所帮助!『插件介绍』Ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名,函数名等。比如,tags文件转载 2013-05-13 12:52:55 · 525 阅读 · 0 评论 -
explicit c++
C++笔记(1)explicit构造函数Explicit Constructors(显式构造函数)收藏 按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String转载 2013-12-03 11:42:13 · 4595 阅读 · 0 评论