随笔分类 -  [002] C/C++

上一页 1 ··· 4 5 6 7 8 9 下一页
c/c++的|、||、&、&&、异或、~、!运算
摘要:位运算位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。其中,按位取反运算符是单目运算符,其余均为双目运算符。位运算符的优先级从高到低,依次为~、&、... 阅读全文
posted @ 2014-08-26 11:49 莫水千流 阅读(700) 评论(2) 推荐(0) 编辑
多重继承和虚继承的内存布局
摘要:这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(By Edsko de Vries, January 2006) 敬告:本文是介绍C++的技术文章,假定读者对于C... 阅读全文
posted @ 2014-08-13 15:50 莫水千流 阅读(782) 评论(0) 推荐(0) 编辑
a<<=n
摘要:a<<=n等价于a=a<<na<<n表示a左移n位(二进制)等价于a乘以2的n次方 a<<=n的含义就是,a等于a乘以2的n次方 阅读全文
posted @ 2014-08-08 10:21 莫水千流 阅读(286) 评论(0) 推荐(0) 编辑
IP地址转换、主机大小端、htonl、ntohl实现
摘要:copy#include //#include usingstd;typedefuint16;unsigneduint32; //短整型大小端互换 #defineBigLittleSwap16(A)((((uint16)(A)&0xff00)>>8)|\ //长整型大小端互换 #defineBi... 阅读全文
posted @ 2014-07-22 09:38 莫水千流 阅读(2700) 评论(0) 推荐(0) 编辑
判断系统大小端方法分析与总结
摘要:转自http://blog.csdn.net/delphiwcdj/article/details/6234383问题 :如何用程序确认当前系统的存储模式(大端还是小端)?写一个C函数,若处理器是Big-endian的,则返回0;若是Little-endian的,则返回1。情况1:利用数组类型#in... 阅读全文
posted @ 2014-07-22 09:09 莫水千流 阅读(6015) 评论(0) 推荐(0) 编辑
C++ 初始化列表(转载)
摘要:何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在 C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。struct f... 阅读全文
posted @ 2014-07-04 10:53 莫水千流 阅读(291) 评论(0) 推荐(0) 编辑
sscanf %*s
摘要:一次在源码里看到 %*s 的格式,从未见过百思不得其解,今天用google的code搜索,搜到一些使用范例,猜测%*s 是说这里有一些字符,长度不一定,按正则表达式的习惯,*代办任意非负整数。例如:sscanf(buf, "SPAMD/%18s %d %*s", versbuf, &response)有3个格式参数 %18s %d %*s,只有两个接收者 versbuf 和 response,按位置匹配,versbuf 对应 %18s,response 对应 %d,剩下的那个%*s是说这里可能还有一些字符串。从这个例子看不出 %*s 作为占位符的作用,如果是下面这样 阅读全文
posted @ 2013-12-05 15:55 莫水千流 阅读(5173) 评论(0) 推荐(0) 编辑
类的const和非const成员函数的重载
摘要:我们从一个例子说起,来看上一篇文章中的String类,我们为它提供一个下标操作符([ ])以读写指定位置的字符(char)。只要了解过C++的操作符重载的语法,很快就可以写出下面这个[]操作符重载函数:char& operator[](int posion) // function_1{ return data[posion];};注意,这里该函数的返回值为一个引用,否则str[0] = 'c'这样的语句就会不合法,因为str[0]将是一个左值。那么,是否提供这样一个function_1就足够了呢?看下面这段代码:const String str= "She& 阅读全文
posted @ 2013-11-06 10:49 莫水千流 阅读(355) 评论(0) 推荐(0) 编辑
C++中extern “C”含义深层探索
摘要:1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。 2.从标准头文件说起 某企业曾经给出如下的一道面试题: 面试题 为什么标准头文件都有类似以下的结构?#ifndef __INCvxWorksh#define __INCvxWorksh#if... 阅读全文
posted @ 2013-09-20 10:32 莫水千流 阅读(302) 评论(0) 推荐(0) 编辑
C++数组参数应用方式探讨(转)
摘要:对于经验丰富的编程人员来说,C++编程语言应该是他们经常使用于程序开发的一种实用性语言。那么,在C++中,C++数组参数永远不会按值传递。它是传递第一个元素(准确地说是第0个)的指针。例如,如下声明:voidputValues(int[10]);被编译器视为:voidputValues(int*);C++数组参数的长度与参数声明无关。因此,下列三个声明是等价的:voidputValues(int*); voidputValues(int[]); voidputValues(int[10]);因为数组被传递为指针,所以这对程序员有两个含义:1、在被调函数内对参数数组的改变将被应用到数组实参上而不 阅读全文
posted @ 2013-08-17 10:11 莫水千流 阅读(263) 评论(0) 推荐(0) 编辑
数组,结构体初始化 {0} (转载)
摘要:一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1.调试的时查看内存发现不是那么一回事,翻了一下《The C++ Programming Language》总算有定论。PDF的竟然不然复制,就把它这章翻译了,如下5.2.1 数组初始化数组可以用一个列值来初始化,例如 int v1[] ={1,2,3,4}; char v2[]={'a','b','c',0};当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。所以v1和v2分别为 阅读全文
posted @ 2013-08-17 10:09 莫水千流 阅读(2199) 评论(0) 推荐(0) 编辑
分解大量switch-case分支的两种方法
摘要:项目经过长期多人的维护,所谓人多手杂,出现不少过多过长的switch-case分支,或者多重switch-case嵌套。每每添加功能,我都会紧皱眉头,然后带着罪恶感向已经成百上千行的函数里再添上一个case分支,然后纠结地收工了事。于是乎,在我的内心深处,switch-case俨然成了代码坏味道的代... 阅读全文
posted @ 2013-08-07 13:15 莫水千流 阅读(2497) 评论(0) 推荐(0) 编辑
C++类模板的三种特化
摘要:说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型; 二是特化为引用,指针类型;三是特化为另外一个类模板。这里用一个简单的例子来说明这三种情况://generalversiontemplateclassCompare{public:staticboolIsEqual(constT&lh,constT&rh){returnlh==rh;}};这是一个用于比较的类模板,里面可以有多种用于比较的函数, 以IsEqual为例。一、特化为绝对类型也就是说直接为某个 阅读全文
posted @ 2013-07-07 21:14 莫水千流 阅读(2704) 评论(0) 推荐(0) 编辑
do...while(0)的妙用
摘要:在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样:version 1boolExecute(){//分配资源int*p=newint;boolbOk(t 阅读全文
posted @ 2013-07-02 10:22 莫水千流 阅读(297) 评论(0) 推荐(0) 编辑
C printf
摘要:1.调用格式为 printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式。参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。2.格式化字符%d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 阅读全文
posted @ 2013-03-23 13:51 莫水千流 阅读(289) 评论(0) 推荐(0) 编辑
float compare 0
摘要:#define EPSILON_E4 (float)(1E-4) #define EPSILON_E5 (float)(1E-5)#define EPSILON_E6 (float)(1E-6)#define CompareFloatA(a,b) ((fabs(a-b)<EPSILON_E4) ? 1 : 0)#define CompareFloatB(a,b) ((fabs(a-b)/a < EPSILON_E4 || fabs(a-b)/b < EPSILON_E4) ? 1 : 0)#define CompareFloatC(a,b) ((fabs(a-b)/a < 阅读全文
posted @ 2013-03-20 10:32 莫水千流 阅读(352) 评论(0) 推荐(0) 编辑
数据结结构学习 ---赫夫曼树
摘要:------ 赫夫曼树和赫夫曼编码的存储表示------typedef struct { unsigned int weight; unsigned int parent,lchild,rchild;}HTNode,*HuffmanTree;typedef char ** HuffmanCode;void HuffmanCoding(HuffmanTree& HT,HuffmanCode & HC,int *w,int n) { if (n < 1) return;\ int m = 2* n + 1; HT = (HuffmanTree) malloc (m+1)* s 阅读全文
posted @ 2012-11-30 07:33 莫水千流 阅读(312) 评论(0) 推荐(0) 编辑
数据结结构学习 -- 树和森林
摘要:------树的双亲表示存储------#define MAX_TREE_SIZE 100;typedef struct PTNode { TElemType data; int parent;}PTNode;typedef struct { PTNode nodes[MAX_TREE_SIZE]; int r,n; //根的位置,和节点数}PTree;数组下标0 1 23 4 5 6 7 8 9R A BC D E FGHK-1 0 0 0 1 1 3 6 6 6------ 数的孩子链表存储表示------typedef struct CTNode { //孩子节点 int ch... 阅读全文
posted @ 2012-11-25 13:53 莫水千流 阅读(216) 评论(0) 推荐(0) 编辑
数据结结构学习 -- 2叉树
摘要:------ 二叉树的顺序存储表示 ------#define MAX_TREE_SIZE 100;typedef TElemType SqBiTree[MAX_TREE_SIZE];SqBiTree bt;------ 二叉树的 二叉链表存储表示 ------typedef struct BiTNode { TElemType data; struct BiTNode * lchild, *rchild;}BiTNode,BiTree;遍历2叉树 L,D,R (左子树,根,右子树) 先根遍历,中根遍历,后根遍历。status PreOderTraverse(BiTree t, statu.. 阅读全文
posted @ 2012-11-24 11:39 莫水千流 阅读(298) 评论(0) 推荐(0) 编辑
C++ 虚函数表解析
摘要:前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函... 阅读全文
posted @ 2012-10-25 19:38 莫水千流 阅读(411) 评论(0) 推荐(0) 编辑

上一页 1 ··· 4 5 6 7 8 9 下一页