C/C++

extern “C”总结
摘要: 经常看到如下代码: #ifdef _cplusplus extern "C" { #endif #include "XXX.h" #ifdef _cplusplus } #endif 解释: 这段代码的含义是,如果当前的程序是C++程序,那么下面引用的头文件是C文件, 那如果当前程序不是C++呢?难道包含的就不是C文件了么?当然不是,不管当前程序是什么,这个XXX.h都是一个C文件 那为什么还要多...阅读全文

posted @ 2010-12-24 21:02 zdd 阅读(291) | 评论 (0) 编辑

整数超出范围时如何表示?
摘要: 类型都是有表示范围的,整型也不例外 在32位系统上int占四个字节内存,能表示的整数范围是-231--231-1 (最高位是符号位) unsigned int 也占四个字节内存,能表示的整数范围是0—232-1 (无符号位) 如果某个整型变量超过了其类型所能表示的范围,编译器该如何解释这个变量呢? 比如定义如下一个变量 char ch = 128 ; 由于char 是8bit 整型,所能表示的范围...阅读全文

posted @ 2010-12-24 20:17 zdd 阅读(359) | 评论 (0) 编辑

判断文件是否存在(C Version)
摘要: code from OgreFor more about _access, see the MSDN link herehttp://msdn.microsoft.com/en-us/library/1w06ktdy(VS.80).aspx阅读全文

posted @ 2010-08-17 10:30 zdd 阅读(138) | 评论 (0) 编辑

C/C++数据对齐
摘要: 为了避免混淆,做如下规定,以下代码若不加特殊说明都运行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为char占一个字节int占四个字节double占八个字节。两个例子请问下面的结构体大小是多少?[代码]这个呢?[代码]在公布答案之前先看一下对齐的规则。对齐规则一般来说,结构体的对齐规则是先按数据类型自身进行对齐,然后再按整个结构体进行对齐,对齐值必须是2的幂,比如1,2, 4, ...阅读全文

posted @ 2010-08-12 11:20 zdd 阅读(2113) | 评论 (10) 编辑

C++中的explicit关键字
摘要: 先看一下MSDN上关于explicit关键字的解释This keyword is a declaration specifier that can only be applied to in-class constructor declarations. An explicit constructor cannot take part in implicit conversions. It can...阅读全文

posted @ 2010-08-05 08:35 zdd 阅读(205) | 评论 (0) 编辑

几道C语言题目
摘要: 第一题下面代码的输出结果是?int main(){ int a[][3] = {1, 2, 3, 4, 5, 6}; int (*ptr)[3] = a; printf("%d, %d\n", (*ptr)[1], (*ptr)[2]); ++ptr; printf("%d, %d\n", (*ptr)[1], (*ptr)[2]); system("pause") ; return 0 ;}结果2, 35, 6分析ptr的类型是int(*)[3],那么*ptr的类型便是int[3],也就是int*(编译器会将数组名转换成指针),所以阅读全文

posted @ 2010-07-16 11:21 zdd 阅读(321) | 评论 (4) 编辑

C++默认参数
摘要: 先看一下什么是默认参数在定义参数的时候同时给它一个初始值。使用默认参数的几个要求如果某个参数是默认参数,那么它后面的参数必须都是默认参数下面两种情况都可以但是这样就不可以默认参数的连续性能保证编译器正确的匹配参数。所以可以下这样一个结论,如果一个函数含有默认参数,那么它的最后一个参数一定是默认参数。默认参数可以放在函数声明或者定义中,但只能放在二者之一通常我们都将默认参数放在函数声明中,因为如果放...阅读全文

posted @ 2010-07-15 17:31 zdd 阅读(283) | 评论 (0) 编辑

一个空类会生成哪些默认函数
摘要: 定义一个空类默认会生成一下函数1. 无参的构造函数2. 拷贝构造函数3. 赋值运算符4. 析构函数(非虚)这些函数只有在第一次使用它们的时候才会生成,他们都是inline并且public的如果想禁止生成这些函数,可以将它们定义成private函数,如果有很多类都有这种需求,那么可以定义一个基类,然后让其他类继承这个类即可下面是来自boost库的代码,任何继承了该类的类,都不能进行复制操作。也不能使...阅读全文

posted @ 2010-07-14 08:57 zdd 阅读(274) | 评论 (0) 编辑

为什么static成员必须在类外初始化
摘要: 为什么静态成员不能在类内初始化在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样为什么?因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。什么东西能在类内初始化能在类中初始化的成员只有一种,那就是静态常量成员。这样不行这样也不行但是这样可以阅读全文

posted @ 2010-07-07 11:36 zdd 阅读(469) | 评论 (3) 编辑

拷贝构造函数
摘要: 什么是拷贝构造函数 拷贝构造函数是一种特殊的构造函数,它的形式如下什么情况下调用拷贝构造函数以下几种情况会调用拷贝构造函数1. 以一个对象初始化另一个对象2. 函数以某个对象为参数3. 函数返回某个对象4. 初始化序列式容器的元素阅读全文

posted @ 2010-07-05 21:40 zdd 阅读(130) | 评论 (0) 编辑

C++ 初始化列表
摘要: 何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。构造函数的两个执行阶段从概念上来讲,构造函数的执行可以分成两个阶段,初始化阶段和计算阶段,初始化阶段先于计算阶段初始化阶段所有类类型(class type)的成员都会在初始化阶段初始化,即使该成员没有出现在构造函数的初始化列表中计算阶段一般用于执行构造...阅读全文

posted @ 2010-07-04 16:59 zdd 阅读(1154) | 评论 (0) 编辑

STL-set
摘要: 简介 set是一种随机存储的关联式容器,其关键词(key)和元素(value)是同一个值。set之中所有元素互不相同。set是通过二叉查找树来实现的。 创建 创建一个空的set创建一个带大于比较器的set, 默认是小于比较器less<int>用数组初始化一个set用拷贝构造函数初始化set区间初始化自定义比较函数以类为比较器以函数指针为比较器遍历正向遍历使用while使用for反向遍历...阅读全文

posted @ 2010-06-01 22:23 zdd 阅读(402) | 评论 (0) 编辑

BSP 面试总结
摘要: 指针参数当指针作为函数参数时,对参数本身的修改并不影响原来的值,比如下面的代码,删除链表中第一个值为item的结点。但是结果却不正确。void Delete(Node *head, int item){ if(head->value == item) head = NULL ;}这段代码的问题是,第一个参数是指针类型而head = NULL修改的实际上是这个指针的一个副本,所以不会对原来的指针产生效果,下面两种方法都可以改正这个错误。void Delete(Node **head, int item) //pointer to pointer{ if(*head->value ==阅读全文

posted @ 2009-06-03 14:00 zdd 阅读(270) | 评论 (3) 编辑