2013年7月12日

无头链表的插入删除操作

摘要: 对于需要将链表中某个节点删除的操作(即不是最后一个节点也不是第一个节点),因为无法找到当前节点的前一个节点,所以无法直接删除,但是可以先将当前节点的后一个节点的是数据保存到当前节点中,然后将当前节点的下一节点的指针指到下一节点的下一节点,最后删除下一个节点,如下图:对于在当前节点前插入一个节点,可以使用同样的原理,现在当前节点后面插入一个节点,然后交换节点的数据,如下图所示:将数据“3”和数据“2”进行交换 阅读全文

posted @ 2013-07-12 14:19 eric.geoffrey 阅读(212) 评论(0) 推荐(0) 编辑

2013年7月11日

Linux中实用链表介绍

摘要: 1. 为使用链表机制, 你的驱动必须包含文件 . 其定义了list_head结构:struct list_head { struct list_head *next, *prev; };为使用Linux链表, 需要重新定义一个数据结构,结构中声明一个list_head类型的成员. 它的声明可能看起来象这样:struct new_struct{ struct list_head list; /* 这个成员的位置无关,即可在结构中任意位置 */ int data; /* 数据成员 */ /* ... 添加其他字段 */};2. 链表在使用前必须初始化:用宏INIT_LIST_HEAD来... 阅读全文

posted @ 2013-07-11 14:33 eric.geoffrey 阅读(170) 评论(0) 推荐(0) 编辑

2013年7月2日

查看CC/GCC中预定义的宏

摘要: 1. cpp -dM /dev/null2. gcc -E -dM -< /dev/null | cut -c 9- | sort 阅读全文

posted @ 2013-07-02 10:01 eric.geoffrey 阅读(242) 评论(0) 推荐(0) 编辑

2013年7月1日

GCC扩展

摘要: 1.函数名称获取(1)__func__, C99标准(2)__FUNCTION__, __PRETTY_FUNCTION__,非标准宏,只是变量,__FUNCTION__只会输出函数名称;而__PRETTY_FUNCTION__对于C来说输出函数名称,但是对于C++来说将输出函数的签名(返回类型 类名::函数名(参数列表)) 阅读全文

posted @ 2013-07-01 17:41 eric.geoffrey 阅读(178) 评论(0) 推荐(0) 编辑

Byte Order(字节序)

摘要: Byte OrderByte orderrefers to the order multi-byte values (typically integers and floating point values, although floating point values are not used within the Linux kernel) are stored by the hardware.Big endianis the byte order where the big end, most significant byte, is stored first (at the lowes 阅读全文

posted @ 2013-07-01 12:08 eric.geoffrey 阅读(1038) 评论(0) 推荐(0) 编辑

2013年6月30日

do...while(0)的作用

摘要: 1. 消除代码的冗余以及无需使用goto语句。int* p = new int; bool bOK(true); do{ bOK = func1(); if(!bOK) break; bOK = func2(); if(!bOK) break; //... }while(0); delete p; p = NULL;2. 宏定义中的do...while(0)避免悬空else分支导致编译失败或运行错误如:#define safe_delete(p) do{ delete p; p = NULL;}while(0)if (p != NULL) safe_delete(p);els... 阅读全文

posted @ 2013-06-30 19:44 eric.geoffrey 阅读(197) 评论(0) 推荐(0) 编辑

静态成员函数

摘要: 1. 静态成员函数不可以调用类的非静态成员函数,因为静态成员函数缺少this指针。2. 静态成员函数的地址可以用普通函数指针存储,而普通成员函数地址需要类成员函数指针存储,例如:class base{ static int func1(); int func2();}int (*pf1)() = &base::func1;int (base::*pf2) = &base::func2; 阅读全文

posted @ 2013-06-30 08:39 eric.geoffrey 阅读(140) 评论(0) 推荐(0) 编辑

2013年6月29日

patch文件制作,排除符号链接的方法

摘要: #!/bin/sh#parameter check# $1 is regarded as the original folder# $2 is regarded as the latest folder# $3 is regraded as the patch fileif [ $# -lt 3 ];thenecho "usage:$0 original_dir dest_dir patch_file"exit -1;fi#variable declareori_dir=$1new_dir=$2patch_file=$3#remove the old patch filei 阅读全文

posted @ 2013-06-29 09:44 eric.geoffrey 阅读(710) 评论(0) 推荐(0) 编辑

指针常量和常量指针

摘要: 1. 指针常量,说明指针本身是常量,在声明时必须初始化,它是不可改变地址的指针,但是可以改变指向的内容:形式如下:type* const pointer,pointer不可作为左值使用。2. 常量指针,指针指向的 内容为常量,即内存地址中的内容不可修改。形式如下:const type* pointer, *pointer不可作为左值使用,而指针允许修改,先声明常量指针,然后再赋值是可以的,即指针是允许修改的。 阅读全文

posted @ 2013-06-29 06:10 eric.geoffrey 阅读(175) 评论(0) 推荐(0) 编辑

C++关键字 mutable explicit volatile介绍

摘要: 1. mutable只能用来修饰类的非静态、非常量的数据成员,我们知道,一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对象的状态也会随之改变。如果一个类的成员函数被声明成const类型,表示该函数不会改变对象的状态,也就是说该函数不会修改类的非静态数据成员,但是有些时候在该类的函数中对类的数据成员进行赋值,这时候就需要mutable关键字出场了。2. volatile关键字,告诉编译器不要持有变量的临时拷贝。3. explicit关键字,禁止单参数的构造函数被用于自动类型转换。 阅读全文

posted @ 2013-06-29 06:05 eric.geoffrey 阅读(296) 评论(0) 推荐(0) 编辑

导航