随笔分类 - c/c++ 基础
摘要:关于缓冲区的详细介绍,请参考 C++编程对缓冲区的理解 CPP的输入输出流和缓冲区 c++输出缓冲区刷新 (1)c++中cin、cout,cerr和c的stdin、stdout、stderr都是同步的,即iostream 对象和 and cstdio流是同步的,同步关系如下: 同步即表明我们可以在程序中混合用cout和printf或其他对应的流对。可以用std::ios_ba...
阅读全文
摘要:假设有一个文件,文件的每一行包括n个整数,整数之间以一个空格隔开,文件总共有m行,但是事先不知道n,m。如何每次从文件中读取一行整数放到一个数组中。可以分为两步:1、首先从文件中读入一行字符串,2、然后从这一行字符串中解析出整数。对于第一步,我们可以有c、c++两种风格的做法c风格:FILE *fp...
阅读全文
摘要:定义二进制变量: 一般是以八进制或者十六进制来定义,八进制数以0开头,十六进制数以0x开头 例如int a = 0x80, 这里的80只能表示8个二进制位,它表示的是int的低8位,前面的24个二进制位补0,所以a = 128;也可以 a = –0x80, 此时a = -128;8进制同理 需要注意的是:如果0x…能够在整形内表示,则其默认是int,否则再看unsigned int能否表示...
阅读全文
摘要:注:本文代码测试环境为win7 X64 cpu, 编译器为gcc4.7.1 和 vs2010 内存对齐是编译器为了便于CPU快速访问而采用的一项技术 我们先从一个例子开始,对下面的类(或者结构体) class node { char c; int i; short s; }no; sizeof(no)的值是多少呢,如果你的回答是7(1+4+2),那么你应该认...
阅读全文
摘要:本文介绍c++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用。为什么要使用智能指针:我们知道c++的内存管理是让很多人头疼的事,当我们写一个new语句时,一般就会立即把delete语句直接也写了,但是我们不能避免程序还未执行到delete时就跳转了或者在函数中没有执行到最后的delete语句就返回了,如果我们不在每一个可能跳转或者返回的语句前释放资源,就会造成内存泄露。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数
阅读全文
摘要:【目录】lib dll介绍生成动态库调用动态库生成静态库调用静态库首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不
阅读全文
摘要:我们在程序中定义了一个基类,该基类有n个子类,为了方便,我们经常定义一个基类的指针数组,数组中的每一项指向都指向一个子类,那么在程序中我们如何判断这些基类指针是指向哪个子类呢?本文提供了两种方法 (1) 自定义类id, (2)typeid一、自定义id如下所示基类father有两个子类son1 和 son2,我们在基类中定义类虚函数id,子类中分别重载了该函数,各个子类返回值都不同 1 class father 2 { 3 public: 4 virtual void fun() 5 { 6 coutid() == 1) 8 cout<<"thi...
阅读全文
摘要:【目录】引言static_cast 定义dynamic_cast 定义举例:下行转换(把基类的指针或引用转换成子类表示)举例:上行转换(把子类的指针或引用转换成基类表示)举例: static_cast 用于基本类型之间、基本类型指针和空指针间的转换reinterpret_cast 定义举例:reinterpret_cast用法const_cast 定义举例:const_cast用法总结c语言中我们经常使用类似于 int a =(int)3.14等这种强制类型转换标准c++的类型转换符:static_cast 、dynamic_cast、 reindivter_cast、 const_cast,
阅读全文
摘要:【目录】基本定义c 函数指针使用举例c++ 函数指针使用举例函数指针作为函数参数函数指针作为函数返回值函数指针数组typedef 简化函数指针操作c语言函数指针的定义形式:返回类型(*函数指针名称)(参数类型,参数类型,参数类型,…);c++函数指针的定义形式:返回类型(类名称::*函数成员名称)(参数类型,参数类型,参数类型,….); 以下代码编译环境:codeblocks with gcc in win 7c语言函数指针使用举例:#include #include int fun1(){ printf("this is fun1 call\n"); return 1;}
阅读全文
摘要:【目录】引言extern “C”的前世今生小心门后的未知世界Q&Ac++调用c的方法c调用c++的方法在你工作过的系统里,不知能否看到类似下面的代码。这好像没有什么问题,你应该还会想:“嗯⋯是啊,我们的代码都是这样写的,从来没有因此碰到过什么麻烦啊~”。你说的没错,如果你的头文件从来没有被任何C++程序引用过的话。这与C++有什么关系呢? 看看__cplusplus(注意前面是两个下划线) 的名字你就应该知道它与C++有很大关系。__cplusplus是一个C++规范规定的预定义宏。你可以信任的是:所有的现代C++编译器都预先定义了它;而所有C语言编译器则不会。另外,按照规范__cpl
阅读全文
摘要:有时候我们在coding的过程中经常需要知道某个变量所能表示的最大或者最小值,在程序设计的基础课上老师肯定也都讲过,只是那么多的数值没办法都记住,下面是我的一些经验,这些也是一个程序员应该掌握的基本知识。下面只以int类型举例,默认 int 32位。首先要明白的是,整数采用的是补码表示方法,忘了补码概念的可以参考http://baike.baidu.com/view/377340.htm。对于有符号整数,最高位是符号位,1表示负数,0表示正数。+0和-0的补码均为:所有位全部置0。int 的最大值二进制表示为:01111111 11111111 11111111 11111111 即2^31.
阅读全文
摘要:(1) rand()函数:原型: int rand(void)功能: 产生从[0,RAND_MAX]之间的随机数,RAND_MAX为系统定义的宏, 32位机器上大小为32767。头文件: stdlib.h或者iostream(2)srand()函数:原型: void srand(unsigned seed)功能: 产生随机数的起始发生数据,和rand函数配合使用头文件: stdlib.h或者iostreamtime.h比如以当前时间作为起始发生数据:srand( (unsigned)time(0) );(3) randomize()函数:原型:void randomize(void)功能: 通
阅读全文
摘要:1 time()头文件:time.h函数原型:time_t time(time_t * timer)功能: 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数(long),其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。举例://获取当前时间time_t nowtime;struct
阅读全文