
C/C++
Unix探索之旅
这个作者很懒,什么都没留下…
展开
-
C语言 static关键字详解
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制 如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将转载 2017-12-05 15:05:11 · 439 阅读 · 0 评论 -
C++内存管理详解
转载自:http://www.cnblogs.com/lancidie/archive/2011/08/05/2128318.html1.1.1 内存分配方式1.1.1.1 分配方式简介 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元转载 2018-02-07 17:18:14 · 181 阅读 · 0 评论 -
C++中的健壮指针和资源管理
我最喜欢的对资源的定义是:"任何在你的程序中获得并在此后释放的东西?quot;内存是一个相当明显的资源的例子。它需要用new来获得,用delete来释放。同时也有许多其它类型的资源文件句柄、重要的片断、Windows中的GDI资源,等等。将资源的概念推广到程序中创建、释放的所有对象也是十分方便的,无论对象是在堆中分配的还是在栈中或者是在全局作用于内生命的。 对于给定的资源的拥有着,是负责转载 2018-02-07 17:39:34 · 263 阅读 · 0 评论 -
C++内存回收
3.1 C++内存对象大会战 如果一个人自称为程序高手,却对内存一无所知,那么我可以告诉你,他一定在吹牛。用C或C++写程序,需要更多地关注内存,这不仅仅是因为内存的分配是否合理直接影响着程序的效率和性能,更为主要的是,当我们操作内存的时候一不小心就会出现问题,而且很多时候,这些问题都是不易发觉的,比如内存泄漏,比如悬挂指针。笔者今天在这里并不是要讨论如何避免这些问题,而是想从另外一个角转载 2018-02-07 17:42:32 · 5477 阅读 · 1 评论 -
C++中的单例模式
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这...转载 2018-03-03 10:47:09 · 135 阅读 · 0 评论 -
gcc命令大全
GCC 选项 GCC 有超过 100 个的编译选项可用. 这些选项中的许多你可能永远都不会用 到, 但一些主要的选项将会频繁用到. 很多的 GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就象大多数 Linux 命令一样你 不能在一个单独的连字符后跟一组选项. 当你不用任何选项编译一个程序时, GCC 将会建立(假定编译成功)一个名为 a.out 的可...原创 2018-03-03 17:33:00 · 687 阅读 · 0 评论 -
位域的定义和使用
位域 : 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字...转载 2018-03-06 12:05:57 · 18641 阅读 · 7 评论 -
C++之char*,const char*和string的相互转换
1. string转const char* string s = "abc"; const char* c_s =s.c_str();2. const char*转string 直接赋值即可 const char* c_s ="abc"; string s(c_s);3. string转char* string s = "abc"; char* c; const i...转载 2018-03-14 11:47:11 · 326 阅读 · 0 评论 -
C++之虚继承和虚函数对C++对象内存模型造成的影响(类/对象的大小)
回顾一下关于类/对象大小的计算原则:类大小计算遵循结构体对齐原则第一个数据成员放在offset为0的位置其它成员对齐至min(sizeof(member),#pragma pack(n)所指定的值)的整数倍。整个结构体也要对齐,结构体总大小对齐至各个min中最大值的整数倍。win32 可选的有1, 2, 4, 8, 16linux 32 可选的有1, 2, 4类的大小与数据成员有关与成员函数无关类...转载 2018-03-26 15:49:08 · 414 阅读 · 0 评论 -
*p++,(*p)++,*++p,++*p的区别
*p++#include<stdio.h>#include<stddef.h>#include<string.h>void main(){ int str[]={1,2,3,4,5}; int *p=str; //*p++; printf("%x\n",p); printf("%d\n",*p++); ...转载 2018-01-27 09:36:38 · 747 阅读 · 0 评论 -
C++内存泄漏
2.1 C++中动态内存分配引发问题的解决方案假设我们要开发一个String类,它可以方便地处理字符串数据。我们可以在类中声明一个数组,考虑到有时候字符串极长,我们可以把数组大小设为200,但一般的情况下又不需要这么多的空间,这样是浪费了内存。对了,我们可以使用new操作符,这样是十分灵活的,但在类中就会出现许多意想不到的问题,本文就是针对这一现象而写的。现在,我们先来开发一个String类,但它...转载 2018-02-07 17:41:27 · 367 阅读 · 0 评论 -
new与malloc的10点区别
1. 申请的内存所在位置new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应转载 2018-01-15 14:56:56 · 165 阅读 · 0 评论 -
C语言 关于宏的 ## 与 #
宏中"#"和"##"的用法转载 2017-12-21 16:06:42 · 187 阅读 · 0 评论 -
C语言 内存管理--指针的函数传递
4 指针参数是如何传递内存的? 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1 中,Test 函数的语句GetMemory(str, 200)并没有使str 获得期望的内存,str 依旧是NULL,为什么?void GetMemory(char *p, int num){p = (char *)malloc(sizeof(cha转载 2017-12-05 14:43:45 · 348 阅读 · 0 评论 -
C语言 嵌入式程序员的0X10个基本问题
预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你转载 2017-12-12 10:19:31 · 1042 阅读 · 0 评论 -
源代码 到 可执行程序的过程
源代码 到 可执行程序的过程编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。源代码-->预处理-->编译-->优化-->汇编-->链接-->可执行文件Source--(编译)--> Assembly--(汇编)-->Obj--(转载 2017-12-23 11:51:31 · 971 阅读 · 0 评论 -
C++ 深入理解 虚继承、多重继承和直接继承
【摘要】本文从5段代码实例出发,通过类中类的普通继承,类的虚继承,类的多重继承,多个虚函数类的普通继承、虚继承与多重继承,几个交叉概念,详细的阐释了继承、虚函数与虚继承的基本概念,深入剖析了继承于虚继承的区别于联系。【Exp.001-虚继承】[cpp] view plain copy#include class转载 2017-12-30 17:49:18 · 196 阅读 · 0 评论 -
sscanf的高级用法 正则表达式
sscanf() - 从一个字符串中读进与指定格式相符的数据。函数原型:int sscanf( const char *, const char *, …);int sscanf(const char *buffer,const char *format,[argument ]…);buffer存储的数据format格式控制字符串argument 选择性设定字符串sscanf会从转载 2017-12-25 11:38:54 · 3698 阅读 · 0 评论 -
extern ”C"的使用
原文地址: http://blog.youkuaiyun.com/u013074465本文分析extern “C”的使用方法;介绍C++和C代码相互调用的方式。链接指示extern "C" extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。被extern "C"限定的函数或变量是extern类型的。转载 2018-01-18 09:48:06 · 334 阅读 · 0 评论 -
右左法则----复杂指针解析
因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的:The right-left rule: Start read转载 2018-02-02 17:06:04 · 140 阅读 · 0 评论 -
C++程序员经常问的11个问题
下面的这些要点是对所有的C++程序员都适用的。我之所以说它们是最重要的,是因为这些要点中提到的是你通常在C++书中或网站上无法找到的。如:指向成员的指针,这是许多资料中都不愿提到的地方,也是经常出错的地方,甚至是对一些高级的C++程序员也是如此。 这里的要点不仅仅是解释怎样写出更好的代码,更多的是展现出语言规则里面的东西。很显然,它们对C++程序员来说是永久的好资料。我相信这一篇文章会使你收获...转载 2018-03-29 17:25:03 · 329 阅读 · 0 评论