摘要: 本文是在阅读《C陷阱与缺陷》一书的时候,觉得其中对自己比较有用的部分,然后摘录出来的。这样以后可以再次的复习。对于学好C语言挺有帮助的。 第4章 链接1. 什么是链接器2. 类型检查 几个比较有用的练习题: 阅读全文
posted @ 2012-02-23 16:01 Mr.Rico 阅读(283) 评论(0) 推荐(0)
摘要: 最近上网,偶遇几个不错的软件。包括apvlv,zathura和vifm。这三款小软件都是类vi软件,就是很多按键都是在模仿vi的方式。apvlv和zathura是两款linux下的pdf阅读器。由于也是刚刚接触这两个,所以我准备先用用apvlv,然后在试用zathrua。这儿介绍两款:两个Linux下的pdf阅读器http://ihacklog.com/software/cool_software_share/pdf-viewer-for-linuxer.htmlapvlv的使用介绍:http://naihe2010.freetzi.com/apvlv-intro.html根据apvlv的使用 阅读全文
posted @ 2012-02-20 13:38 Mr.Rico 阅读(4157) 评论(0) 推荐(0)
摘要: 可以使用fwrite()将一个结构体写入文件: fwrite(&some_struct,sizeof somestruct,1,fp);对应的fread函数可以再把它读出来,此处fwrite受到一个结构的指针并把这个结构的内存映像作为字节流写入文件。sizeof操作符计算出结构占用的字节数。但是这样用内存映像写出的数据文件却是不能够移植的,尤其是当结构中包含浮点成员或指针的时候。结构的内存布局跟机器和编译器都有关。不同的编译器可能使用不同数量的填充位,不同机器上基本类型的大小和字节顺序也不尽相同。因此,作为内存映像写出的结构在别的机器上(甚至是被别的编译器编译之后)不一定能被读回来。 阅读全文
posted @ 2012-02-17 16:42 Mr.Rico 阅读(18825) 评论(0) 推荐(1)
摘要: /Files/xkfz/为什么采用虚函数virtual.ppt C++中的继承与虚函数各种概念 虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段。而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个间接的指针去存取基类对象中的字段。 继承的特性 继承是面向对象中引入的重要特性之一,它的一个重要的特点就是子类是父类,父类不是子类。也就是说: 1. 如果基类指针指向子类对象(pbase=&pchild),则该指针只能调用基类定义了的函数;(因为这个地方是静态绑定,而静态绑定所依赖的就是指... 阅读全文
posted @ 2012-02-16 16:01 Mr.Rico 阅读(5050) 评论(0) 推荐(1)
摘要: 在C和C++中是不同的,我们知道C语言比较宽松、灵活,而C++的目标就是改变C语言比较宽松的特点,实行了比较严格的做法,包括严格的类型检查等等。实际上,在C语言中,main函数可被递归调用,而在C++标准中,main函数不可以被递归调用。C中递归调用: (参考:http://blog.csdn.net/songkexin/article/details/1842654#reply)#include<stdio.h>intmain(){intc;if((c=getchar())!=EOF)//EOF用Ctrl+Z(win)//Ctrl+D(linux){main();}printf( 阅读全文
posted @ 2012-02-16 10:55 Mr.Rico 阅读(5601) 评论(1) 推荐(1)
摘要: 最近一直在使用dropbox在实验室电脑和笔记本之间进行文件的同步。但是有些文件,比如bash的配置文件位于~/目录下,同步起来不方便,并且,为了以后重装系统的方便,我是将一些类似bashrc和vimrc的配置文件进行备份,统一存放的。然后将这些文件放入到dropbox中进行同步。但是,有时,比如突然想为一些经常用到的命令进行重命名,这个时候就要在.bashrc文件中添加alias语句的。改完.bashrc文件之后还要修改备份的文件,特别不方便。这两天在整理硬盘文件的时候,突然发现将~/目录下的.bashrc文件设为软连接,链接到所备份的文件。好,说干就干!之后我也将一些常用软件的配置文件也. 阅读全文
posted @ 2012-02-14 21:48 Mr.Rico 阅读(1491) 评论(0) 推荐(0)
摘要: 昨天看到了一些比较巧妙的算法,觉得挺不错的。参考:http://blog.csdn.net/csdn_zc/article/details/67769291. 素数判断作者给出了几种方法。方法一:View Code intisPrime(intn)//函数返回1表示是质数,返回0表示不是质数{inti;for(i=2;i<n;i++)if(n%i==0)return0;return1;}这个是最原始的做法:从2开始,检测数n是否能被其之前的任意一个数整除,如果能,说明其不是素数。方法二:View Code intisPrime(intn){inti;for(i=2;i*i<n;i+ 阅读全文
posted @ 2012-02-11 11:00 Mr.Rico 阅读(992) 评论(0) 推荐(0)
摘要: 参考:http://blog.csdn.net/wanwenweifly4/article/details/6739687 红色是我添加的,其他地方是原作者的。 主要是看了上面的这篇“从底层汇编理解 c++ 引用实现机制“的文章之后,觉得不错。就转了过来,同时,对文中的程序都在自己的机器上验证了一下。 使用的G++版本:g++ (GCC) 4.5.1 20100924 如果要查看汇编后代码与源码的关系,我用的方法是: 先用g++生成带有调试信息的目标文件:g++ -g -c ref.cc 然后再利用objdump命令查看目标文件ref.o:objdump -S ref... 阅读全文
posted @ 2012-02-05 09:25 Mr.Rico 阅读(2410) 评论(1) 推荐(3)
摘要: 假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有? 解答: (1)把其中的每个字母都放入一个Hashtable里(成本是O(n)或16次操作)。然后轮询第二个字串,在Hashtable里查询每个字母,看能否找到。如果找不到,说明没有匹配成功。 (2) 假设我们有一个一定个数的字母组成字串 —— 我给每个字母分配一个素数,从2开始,往后类推。这样A将会是2,B将会是3,C将会是5,等等。现在我遍历第一个字串,把每个字母代表的素数相乘。你最 终会得到一个... 阅读全文
posted @ 2012-02-03 16:14 Mr.Rico 阅读(4848) 评论(0) 推荐(0)
摘要: 1. 将当前目录下的文件去除后缀名".sh" for i in `ls .`do mv -v $i `echo ${i%%.sh}`done2.shell中在列文件目录时防止带空格的文件名被显示成2个文件带空格的文件名变量不被当成两个参数 ls -1 目录路径 | while read linedoecho $linedone解释:ls后面的-1是用来让文件每行只显示一个,然后我们依次读取这些行,这样就能把指定目录下的文件依次赋给变量$line,然后使用变量$line就行了。其他情况下对于带有空格情况的处理方式就是对变量加上双引号:如 rm -r "$a" 阅读全文
posted @ 2012-02-02 22:25 Mr.Rico 阅读(799) 评论(0) 推荐(0)
摘要: echo $SHLVL 该变量包含当前工作的shell level $* 所有参数列表受IFS控制 PS1为提示符,可进行设置PS1="[\u@\h\W]\$"PS2为换行时的那个符号如aa'换行后默认会出现>我们可以进行修改PS2=''换成你喜欢的IFS为变量的分隔符,默认是空格 表格 B-1. 特殊的shell变量 变量含义 $0 shell或shell脚本的名字 $1 位置参数 #1 $2 - $9 位置参数 #2 - #9 ${10} 位置参数 #10 $# 位置参数的个数 "$*" 所有的位置参数(整体作为单个字符 阅读全文
posted @ 2012-02-02 22:15 Mr.Rico 阅读(4262) 评论(0) 推荐(0)
摘要: 开始学习在Linux下写程序,利用gcc进行编译的时候经常需要添加一些选项,为了便于查找,将这写常用的选项整理出来。GCC常用选项 -c 通知GCC取消链接步骤,即编译源码并在最后生成目标文件; -Dmacro 定义指定的宏,使它能够通过源码中的#ifdef进行检验; -E 不经过编译预处理程序的输出而输送至标准输出; -g3 获得有关调试程序的详细信息,它不能与-o选项联合使用; -Idirectory 在包含文件搜索路径的起点处添加指定目录; -llibrary 提示链接程序在创建最终可执行文件时包含指定的库; -O、-O2、-O3 将优化状态打开,该选项不能与-g选项联合使用; -S 要 阅读全文
posted @ 2012-02-02 22:13 Mr.Rico 阅读(360) 评论(0) 推荐(0)
摘要: 1.Unix系统里,每行结尾只有“<换 行>”,即“/n”;Windows系统里面,每行结尾是“<换行><回车>”,即“/n/r”;Mac系统里,每行结尾 是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件 在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。 2. 内核区别。LINUX内核与WINDOWS内核最大的区别就是GUI是否做在内核 中。LINUX的内核是不包括GUI的,而WINDOWS则把GUI做到内核中,所以WINDOWS在GUI方面消耗 阅读全文
posted @ 2012-02-02 22:11 Mr.Rico 阅读(236) 评论(0) 推荐(0)
摘要: matlab:linux环境中将m文件编译成动态链接库1. 设定编译器为gcc 先输入:mex -setup 然后选择gcc 然后输入:mbuild -setup 同样选择gcc 2. 生成链接库 (1)生成c++链接库mcc -W cpplib:libemailSend -T link:lib emailSend.m 其中cpplib表示生成c++链接库,libemailSend是库的名称 (2)生成c链接库 mcc -W lib:libemailSend -T link:lib emailSend.m 与上面的类似 阅读全文
posted @ 2012-02-02 22:09 Mr.Rico 阅读(3001) 评论(0) 推荐(0)
摘要: 内存对齐是编译器为了便于CPU快速访问而采用的一项技术,对于不同的编译器有不同的处理方法。Win32平台下的微软VC编译器在默认情况下采用如下的对齐规则:任何基本数据类型T的对齐模数就是T的大小,即sizeof(T)。比如对于double类型(8字节),就要求该类型数据的地址总是8的倍数,而char类型数据(1字节)则可以从任何一个地址开始。Linux下的GCC奉行的是另外一套规则:任何2字节大小(包括单字节吗?)的数据类型(比如short)的对齐模数是2,而其它所有超过2字节的数据类型(比如long,double)都以4为对齐模数。下面的程序可以验证:#include<stdio.h& 阅读全文
posted @ 2011-12-21 23:37 Mr.Rico 阅读(2132) 评论(2) 推荐(0)