随笔分类 - C/C++
摘要:由于之前接触过一段时间IOS,在IOS里面内存管理很重要,而且对于初学者来说是件不大容易的事情,必须处处小心。重新回到C/c++编程时,有几个概念一直纠缠不清,有点跟IOS混掉的味道了。所以,这里就理理思路:先看个例子:1 int a = 4;2 int b = a;3 a ++;//b此时为何值?这是最经常遇到的小例子,以前总是不在意,没有去细细想清楚。在上面这种情况下,b会随着a变化而变化吗?NO。b此时仍旧是4。这里的a、b只是一种“标签”,可以看作贴在箱子上的标签,这里的“箱子”就是内存块。标签就代表着实际的...
阅读全文
摘要:A a;A * a = new a();以上两种方式皆可实现类的实例化,有new的区别在于:1.前者在栈中分配内存,后者为动态内存分配,在堆中,在一般应用中是没有什么区别的,但动态内存分配会使对象的可控性增强。2.大程序用new,小程序直接申请3.只是把对象分配在堆栈内存中4.new必须delete删除,不用new系统会自动回收内存带着疑惑网上找到这篇帖子,学习:小弟 最近刚接触 Visual C++看到一本 vc++ 6.0的教程上 在 声明了 一个类的对象后 没有用类似于 C# 或 Java中的new 来实例化而直接调用其公开成员,请问 vc++ 是不是可以这样调用对象,还是书中有错误??
阅读全文
摘要:一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放 ,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。 - 程序结束后由系统释放。 4、文字常量区 —常量字
阅读全文
摘要:我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:1、假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?2、某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) 。既然是 Sleep 0 毫秒,那么他跟去掉这句代码相比,有啥区别么?我们先回顾一下操作系统原理。操作系统中,CPU竞争有很多种策略。Unix系统使用的是时间片算法,而Windows则属于抢占式的。
阅读全文
摘要:在学习到《Essential C++》3.6节时自己按照自己的想法来实现书上提到的思路。代码虽然简单,不过自己却发现有很多其他地方不熟悉,比如函数指针的用法,仿函数和函数适配器的使用。捣鼓了半天,总算懂了点眉目,简单总结下以备忘。文档按照五部分分写,先依次简单地介绍find()与find_if()算法、函数指针用法、仿函数(functon object)和函数适配器(function adapters)。最后贴上自己实验的代码并简单分析。一、因为问题起于泛型搜索算法find_if(),所以先总结下有关find()和find_if()。 声明: InputIterator find ...
阅读全文
摘要:extern就是告诉编译器,这个变量或者函数在别的文件已经定义过,我在这里只是引用一下文件a.cstaticinti; //只在a文件中用intj; //在工程里用staticvoidinit() //只在a文件中用{}voidcallme() //在工程中用{staticintsum;}上面的全局i变量和init()函数只能用在a.c文件中,全局变量sum的作用域只在callme里。变量j和函数callme()的全局限扩充到整个工程文件。所以可以在下面的b.c中用extern关键字调用。extern告诉编译器这个变量或者函数在其他文件里已经被定义了。文件b.cexternintj; //调.
阅读全文
摘要:在C++中实现变长数组一般来说,有三种方法来申请多维数组:C的malloc/Free C++的new/delete STL容器Vector1.变长一维数组这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做://文件名: array01.cpp#include <iostream>using namespace std;int main(){ int len; cin> > len; //用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 int *p=new in
阅读全文
摘要:unsigned int 0~4294967295int 2147483648~2147483647unsigned long 0~4294967295long 2147483648~2147483647long long的最大值:9223372036854775807long long的最小值:-9223372036854775808unsigned long long的最大值:1844674407370955161__int64的最大值:9223372036854775807__int64的最小值:-9223372036854775808unsigned __int64的最大值:18446
阅读全文
摘要:ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。2、析取
阅读全文