自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 虚析构函数

《C++ Primer》中对于虚析构函数如此解释:    自动调用基类部分的析构函数对基类的设计有重要影响。    删除指向动态分配对象的指针时,需要运行析构函数在释放对象的内存之前清除对象。处理继承层次中的对象时,指针的静态类型可能与被删除对象的动态类型不同,可能会删除实际指向派生类对象的基类类型指针。    如果删除基类指针,则需要运行基类析构函数并清除基类的成员,如果对象实际是派

2012-10-04 23:12:38 392

转载 位运算之左移右移运算之详解

转自:http://www.cnblogs.com/yyangblog/archive/2011/01/14/1935656.html代码 #include "stdio.h" char leftshift(char i, int n) { if(n < 0) return -1; return i<<n; } char ri

2012-10-02 12:40:25 1131

转载 指针使用面试题

1. char * const p;  char const * p  const char *p  上述三个有什么区别?  char * const p; //常量指针,p的值不可以修改  char const * p;//指向常量的指针,指向的常量值不可以改  const char *p; //和char const *p------------------

2012-10-01 09:32:45 406

原创 C语言内存分配管理(学习笔记)

一、堆和栈的区别程序的内存分配1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局

2012-10-01 00:03:30 814

转载 UDP伪首部的作用

最近在读Stevens 的《tcp/ip详解 卷一 协议》,其中介绍到了UDP和TCP伪首部,由于书中介绍短小精悍,因此有必要扩充理解一下。关于TCP/UDP伪首部我是这么理解的: 首先,要时刻谨记一个“伪”字,既然是“伪”首部,也就是假的,不仅是“假”首部,而且“假”到连地址空间都没有。也就是说伪首部是不占地址空间的,在实际传输中不存在这样的字段。只是在使用的时候把它拿出来一下。

2012-09-02 15:37:37 7777

转载 埃拉托斯特尼筛法--查找素数

算式给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......。[编辑]步骤详细列出算法如下:列出2以后的所有序列:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

2012-08-27 11:04:46 2204

转载 #define和typedef

原文:http://hi.baidu.com/%C9%DB%B7%C9/blog/item/9d54c1fc602ec7f5fd037f4a.html#define(宏定义)只是简单的字符串代换(原地扩展),它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了。typedef是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),它的新名字具有一定的封装性,以致于新命名

2012-08-24 13:09:49 268

原创 _alloc/malloc/calloc 内存分配的区别

_alloc原型:void *_alloc(size_t size);本函数与上述的两个函数不同,因为它是在栈上分配了size大小的内存,因此使用此函数分配的内存不用再担心内存释放的情况了。但是使用此函数需要注意的是:在函数内部使用此函数分配的内存随着函数的终结不复存在,因此不能将此函数分配的内存供函数外部使用。malloc原型:void * malloc(size_t

2012-08-05 01:27:54 558

转载 gnome3.2 安装配置

1.安装gnome3.2sudo apt-get updatesudo apt-get install gnome-shell2.安装gnome3.2的高级管理工具sudo apt-get install tweaksudo apt-get install gnome-tweak-tool3.注销重新登录gnome3.24.打开tweak-tool,设置你认为右必要的选

2012-08-03 00:12:09 490

转载 SOCKET 封包和拆包

转自:http://blog.sina.com.cn/s/blog_4a69d6c301000821.html        对于基于TCP开发的通讯程序,有个很重要的问题需要解决,就是封包和拆包.自从我从事网络通讯编程工作以来(大概有三年的时间了),我一直在思索和改进封包和拆包的方法.下面就针对这个问题谈谈我的想法,抛砖引玉.若有不对,不妥之处,恳求大家指正.在此先谢过大家了.一

2012-07-31 09:37:31 1166 1

原创 Dell N4050 ubuntu系统禁用触摸板

给笔记本装了ubuntu 11.10,在使用过程中发现,每次敲打笔记本自带的键盘的时候,老是回去触碰到触摸板,导致鼠标无端端跳位。并且无法通过Fn+F3来进行控制触摸板的开关。    通过查找相关资料,找到了解决办法如下:方法一:    首先开启终端,输入:zhengxiaoxu@zhengxiaoxu:~$ xinput list    得到如下列表信息:

2012-07-31 01:18:07 1314

转载 《C专家编程》学习笔记--位段结构

位段以位为单位定义结构体(或共用体)中成员所占存储空间的长度。结构中也允许存在位段、无名字段以及字对齐所需的填充字段。通过在字段的生命后面加一个冒号以及一个表示字段位长的整数来实现。    含有位段的结构体类型称为位段结构。位段结构也是一种结构体类型,只不过其中含有以位为单位定义存储长度的整数类型位段成员。采用位段结构既节省存储空间,又可方便操作。位段结构中位段的定义格式为:

2012-07-30 01:22:12 1130

转载 apue.h 和apueerror.h的代码

===================apueerror.h=========================================$ cat apueerror.h#include /* for definition of errno */#include /* ISO C variable aruments */static void err_do

2012-07-29 10:31:34 514

转载 Git/Github 学习

http://www.linuxidc.com/Linux/2011-04/35036.htm1. GIT相比CVS/SVN,Git 的优势:- 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块中文版Git使用指南 点击这里。2. GitHubGitHub是一个托管Git (开源或闭源)项

2012-07-25 21:08:48 296

转载 sqlite安装

sudo apt-get install sqlite3为了使GCC能顺利编译有sqlite3.h头文件的源码需要:sudo apt-get install libsqlite3-dev编译时在最后加上-lsqlite3例如,gcc -o hello hello.c -lsqlite3

2012-07-21 00:20:35 264

转载 linux进程管理的一些问题

linux进程管理的一些问题一.进程创建一、进程LINUX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。一个进程实体由若干个区(段)组成,包括程序区、数据区、栈区、共享存储区等。每个区又分为若干页,每个进程配置有唯一的进程控制块PCB,用于控制和管理进程。PCB的数据结构如下:1、进程表项(Process Table Entry)。包括一些最常用的

2012-07-16 01:36:39 2726

转载 霍夫曼编码压缩算法 - 博客 - 伯乐在线

霍夫曼编码压缩算法 - 博客 - 伯乐在线前两天发布那个rsync算法后,想看看数据压缩的算法,知道一个经典的压缩算法Huffman算法。相信大家应该听说过 David Huffman 和他的压缩算法—— Huffman Code,一种通过字符出现频率,Priority Queue,和二叉树来进行的一种压缩算法,这种二叉树又叫Huffman二叉树 —— 一种带权重的树。从学校毕业很长时间的我忘

2012-07-16 01:33:56 834

原创 《VC++深入详解》学习笔记

创建一个Win32应用程序的步骤:1.编写WinMain函数,可以在MSDN上查找并复制;    int WINAPI WinMain(...);2.设计窗口类;WNDCLASS    WNDCLASS wndcls;3.注册窗口类;    RegisterClass(&wndcls);4.创建窗口;    CreateWindow(...);5.显示并更新窗口

2012-07-16 01:33:11 438

转载 安装SVN

1.首先需要安装SVN。    Ubuntu下的SVN安装十分简单,sudo apt-get install subversion 2.检出文件(checkout):   使用命令:svn co svn://x.x.x.x   然后系统会用当前的用户名登录,提示输入密码,如果第一次密码输入错误,   会提示你输入用户名;输入正确后,就可以检出文件了。3.添加文件(a

2012-07-16 01:30:42 220

转载 Linux下的段错误调试方法

Linux下的段错误调试方法简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址。  一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中

2012-07-16 01:29:34 438

转载 0元素数组实现变长TLV数据结构

使用0元素数据来实现变长的TLV数据结构,这种实现方法巧妙,使用方便,但注意老版本C不支持这种定义,C99支持。如下结构体:struct pkt {    UINT16 pkt_type;    UINT16 pkt_len;    char pkt_data[0];} 结构体中最后一个成员为0元素的数组,值得注意的是在这个结构体中pkt_data[0]成员并不占有

2012-07-16 01:28:24 1857

转载 SQLITE 操作入门

SQLITE 操作入门  sqlite 提供的是一些 C 函数接口,你可以用这些函数操作数据库。通过使用这些接 口,传递一些标准 sql 语句(以 char * 类型)给 sqlite 函数, sqlite 就会为你操作数据库。  sqlite 跟 MS 的 access 一样是文件型数据库,就是说,一个数据库就是一个文件,此 数据库里可以建立很多的表,可以建立索引、触发器

2012-07-16 01:27:33 1031

转载 PDF文件的亂碼問題

PDF文件的亂碼問題[編輯]文件查看器(Evince)打開中文PDF顯示方塊的問題使用Evince打開部分pdf文件,特別是中國知網上下載的pdf論文時,常常顯示為方塊。evince,okular, epdfview的pdf功能均由xpdf的分支poppler提供。必須先安裝poppler-data sudo apt-get install poppler-da

2012-07-16 01:26:01 680

转载 嵌入式linux学习路线

学习步骤如下:1、Linux 基础安装Linux操作系统Linux文件系统Linux常用命令Linux启动过程详解熟悉Linux服务能够独立安装Linux操作系统能够熟练使用Linux系统的基本命令认识Linux系统的常用服务安装Linux操作系统Linux基本命令实践设置Linux环境变量定制Linux的服务 Shell 编程基础使用vi编辑文件使用Emacs编辑文件

2012-07-16 01:25:06 436

转载 samba安装步骤

环境:ubuntu10.101、 apt-get install samba2、 apt-get install smbfs二. 创建共享目录  mkdir /home/share  sodu chmod 777 /home/share  三. 创建Ubuntu Samba配置文件  1. 保存现有的配置文件 cp /etc/samba/smb.conf /et

2012-07-16 01:23:41 337

转载 Makefile学习

Makefile规则介绍一个简单的Makefile描述规则组成:TARGET... : PREREQUISITES...COMMAND......target:规则的目标。通常是最后需要生成的文件名或者为了实现这个目的而必需的中间过程文件名。可以是.o文件、也可以是最后的可执行程序的文件名等。另外,目标也可以是一个make执行的动作的名称,如目标“clean”,我们称这样的

2012-07-16 01:23:03 280

转载 Linux Kernel Map

2012-07-16 01:22:15 250

原创 重定向输出以追加到文件

当将符号表示法 >> filename 添加到命令结尾时,该命令的输出将追加到指定的文件名,而不覆盖现有数据。>> 符号称为追加重定向运算符。例如,要将 file2 附加到 file1,请输入以下命令:cat file2 >> file1注: 如果 file1 文件不存在,那么除非指定了 ksh(Korn shell 程序)或 csh(C shell)命令中内建的 set

2012-07-16 01:20:38 2069

转载 virtualbox数据空间配置

虚拟机内的系统是linux的(主机为xp,虚拟机系统为ubuntu)1.进入Ubuntu系统后,选择VB中的设备,安装增强功能,加载VBOXADDITIONS.*.ISO 打开终端运行(桌面应用也可以直接打开光驱安装):cd /media/cdrom0 sudo ./VBoxLinuxAdditions-x86.run或者直接在终端中输入命令:sudo apt-get

2012-07-16 01:19:05 285

原创 大头小头字节序

记住,书写方式是大头。****************************************************************************想要查看当前环境是高地址还是低地址可以使用联合体如:union str{int b;char a;};int main(){str s;s.b = '

2012-07-16 01:15:59 584

转载 讲讲volatile的作用

讲讲volatile的作用一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:     1). 并行设备的硬件寄存器(如:状态寄存器)     2). 一个中断服务子程序中会访问到的非自

2012-07-16 01:14:50 288

转载 小技巧

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)先分析一下这个 宏的运行机理:一共4步 1. ((TYPE *)0) 将零转型为TYPE类型指针; 2. ((TYPE *)0)->MEMBER 访问结构中的数据成员; 3. &(((TYPE *)0)->MEMBER)取出数据成员的地址; 4.(si

2012-07-16 01:13:54 182

转载 C语言宏定义技巧(常用宏定义)

写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H  //头文件内容#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef

2012-07-16 01:07:29 442

原创 《C与指针》学习笔记

start from P158 8.2.4 指向数组的指针 int vector[10], *vp = vector;        //正确,vector和vp具有相同类型:指向整型的指针。int matrix[3][10], *mp = matrix;    //错误,matrix不是指向整型的指针,而是指向整型数组的指针,mp是指向整型的指针。指向整型数组的指针该这么定义:i

2012-07-16 01:06:14 324

转载 c++内存中字节对齐问题详解

一、什么是字节对齐,为什么要对齐?    现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。    对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据

2012-07-16 01:05:28 405

转载 C语言之详解#ifdef等宏

C语言之详解#ifdef等宏指令用途#空指令,无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义,则编译下面代码#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码#endif结束一个#if……

2012-07-16 01:03:46 917

转载 指向多维数组的指针变量

指向多维数组的指针变量1 多维数组的指针多维数组可以看作是一维数组的延伸,多维数组的内存单元也是连续的内存单元。换句话说,C语言实际上是把多维数组当成一维数组来处理的。下面以二维数组为例说明这个概念。比如,现在有一个int型的二维数组a[3][4],计算机认为这是一个一维的数组a[3],数组的三个元素分别是a[0],a[1]和a[2]。其中每个元素又是一个一维数组,例如a[0]又是

2012-07-16 00:58:51 1024

转载 常量指针 和 指针常量

常量指针 和 指针常量     在C++的学习中,有人经常搞不清楚“常量指针”和“指针常量”这两个概念。其实简单一点讲,“常量指针”所指向的地址上的数据是常量,而“指针常量”所指向的地址是常量,地址上面的数据是可以变化的。     下面看及格简单的例子,可以说明他们的区别:            第一个  1 void main(){ 2     char *str

2012-07-16 00:55:20 219

转载 Printf()输出格式控制

1.转换说明符       %a(%A)     浮点数、十六进制数字和p-(P-)记数法(C99)       %c             字符       %d             有符号十进制整数       %f              浮点数(包括float和doulbe)       %e(%E)     浮点数指数输出[e-(E-)记数法]

2012-07-16 00:54:24 569

转载 csdn题目(含解答)

1. 有以下程序片段:int a[] = { 1, 2 };int *p = a;问:当sizeof(int) = 4时,sizeof(a)=?sizeof(p)=?分别为什么?答案:首先要知道数组名和指针之间的区别,这并不成问题。但是,请注意这道题有一个陷阱,一些朋友可能认为p是指向int类型的指针,所以sizeof(p)才等于4,这种想法是不

2012-07-16 00:50:59 1135

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除