c/c++
chiliaolm
奋斗是幸福的
展开
-
static的用法
静态局部变量在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量。我们先举一个静态局部变量的例子,如下12345678910111213141516//Example3#include#includevoid fn();void main(){转载 2016-03-05 10:35:51 · 297 阅读 · 0 评论 -
C++ 继承中的内存布局
今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译 译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细 节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Objec转载 2016-12-02 16:52:44 · 347 阅读 · 0 评论 -
指针以及二维数组
如果配合http://wenku.baidu.com/view/acf838ef856a561252d36fe3.html去看的话下面的内容比较容易理解从一道题目说起。#include using namespace std;int main(){int ia[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};typedef int int_arra转载 2016-11-19 20:25:38 · 764 阅读 · 0 评论 -
static静态变量的理解
静态变量 类型说明符是static。静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。静态变量虽在程序的整个执行过程中转载 2016-10-12 10:24:35 · 321 阅读 · 0 评论 -
字符串总结
字符串原创 2016-10-21 23:12:20 · 263 阅读 · 0 评论 -
一条进程的栈区、堆区、数据区和代码区在内存中的映射
一条进程的栈区、堆区、数据区和代码区在内存中的映射 1>栈区:主要用来存放局部变量, 传递参数, 存放函数的返回地址。.esp 始终指向栈顶, 栈中的数据越多, esp的值越小。 2>堆区:用于存放动态分配的对象, 当你使用 malloc和new 等进行分配时,所得到的空间就在堆中。动态分配得到的内存区域附带有分配信息, 所以你 能够 free和delete它们。转载 2016-07-19 10:59:41 · 307 阅读 · 0 评论 -
数据区,代码区,堆栈区,操作系统堆栈
数据区,代码区,堆栈区,操作系统堆栈 堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两转载 2016-07-19 10:54:22 · 412 阅读 · 0 评论 -
内存对齐
在我们的程序中,数据结构还有变量等等都需要占有内存,在很多系统中,它都要求内存分配的时候要对齐,这样做的好处就是可以提高访问内存的速度。 我们还是先来看一段简单的程序: 程序一 1 #include iostream> 2 using namespace std; 3 4 struct X1转载 2016-05-23 16:59:56 · 242 阅读 · 0 评论 -
C++ 二进制、十进制、八进制和十六进制 转换
在C++中,默认状态下,数据按十进制输入输出。如果要求按八进制或十六进制输入输出,在cin或cout中必须指明相应的数据形式,oct为八进制,hex为十六进制,dec为十进制。但是二进制没有默认的输出格式,需要自己写函数进行转换。输入整数n , 则在C++中cout代码注解#include #include using namespace std;int main(void)转载 2016-05-30 10:38:23 · 20472 阅读 · 0 评论 -
typedef的用法
第一、四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽转载 2016-05-30 10:29:34 · 215 阅读 · 0 评论 -
c++ 下的多重继承虚函数调用问题
最近看老师上课讲的一个关于com组件的程序,当时虽然程序有些复杂,但是感觉自己已经明白原理了。回来自己对着程序一步步演练时,发现结果不对,后来通过断点调试、发现了一个让我惊呆了的问题。下面我把这个问题简化一下。#includeusing namespace std;class A{public:virtual void put(){cout }};cla原创 2016-04-17 21:10:18 · 1169 阅读 · 0 评论 -
析构函数到底都做了什么
析构函数释放对象所使用的资源,并且销毁对象的非static数据成员。析构函数是类的一个成员函数,名字有波浪号接类名构成。没有返回值,也不接受参数,同时由于析构函数不接受参数,因此它不能重载,所以任何一个类都只具有一个析构函数。析构函数具有一个函数体和一个析构部分。首先执行函数体,然后执行析构部分,来销毁成员,但是析构部分是隐式的。其实析构部分就已经把成员给销毁了,那为什么还需要函数体呢原创 2016-03-10 18:34:22 · 1780 阅读 · 0 评论 -
指针的类型问题
指针中所存取的值是它所指向变量的地址,所占用的空间是一定的。那么为什么不给指针直接定义一个属于它自己的类型,而是要写出它所指向的变量的类型呢?这是因为我们对于指针的操作不止是取地址符,还有对指针使用加法。当对指针加1时,指针会指向这个变量紧邻的空间的地址,这个时候就需要知道指针所指向的变量所占用的空间大小了。例如: int *ptr; char *qtr; ptr++原创 2016-04-02 21:38:01 · 304 阅读 · 0 评论 -
从scanf角度看待输入
c primer plus中对scanf进行了一番详解: 假定使用了%d说明符来读取一个整数。scanf()函数开始试图读取一个输入字符,它跳过空白字符直到遇到一个非空白字符,当碰到整数或者+或者-时,它就保存并读取下一个字符;如果接下来的字符是一个数字,它就保存,并读取下一个字符直到遇到一个非数字的字符。如果遇到非数字字符,它就得出结论:已经读到整数的尾部。并把这个非数字字符放原创 2016-03-05 10:39:38 · 589 阅读 · 0 评论 -
关于unsigned short,char,unsigned int 之间的赋值
char a=254; unsigned short b=a; unsigned int c=b; cout问:在32位机上,下面程序的输出结果。原创 2016-12-08 16:53:28 · 10000 阅读 · 0 评论