02 2012 档案

摘要:《Linux 环境C程序设计》阅读笔记Chapter 1 GNU项目GNU项目是1983年理查德·斯托曼(Richard Stallman)创立的,最初的目标是通过使用必要的工具从源代码开始创建一个自由的类UNIX操作系统。GNU花了10年的时间创建了GCC编译器、Emacs编辑器等多个工具。这些工具的改进版本和衍生品必须遵循GPL协议。但是在20世纪80年代缺少最关键的组件,即操作系统核心,直到Linux诞生。2. 开源软件与免费软件免费软件是以二进制的形式发布的 ,可以使用,但是无权修改。开源软件是以源代码的形式发布的,遵循GPL协议,可以对其进行修改。3. Linux内核与版本 阅读全文
posted @ 2012-02-29 22:35 Mr.Rico 阅读 (1124) | 评论 (0) 编辑
摘要:第12章 类1. 构造函数类的构造函数一般使用一个初始化列表来初始化对象的数据成员。2. 成员函数在类内部声明成员函数是必须的,而定义成员函数则是可选的。在类内部定义的函数默认为inline。而在类外部定义的成员函数必须指明它们是在类的作用域内。成员函数有一个附加的隐含实参,将函数绑定到调用函数的对象。这个隐含的实参其实是this指针。对像的this指针并不是对象本身的组成部分,它不占对象的内存空间,在每次非static成员函数调用对象的时候,this指针作为隐藏的第一个参数由编译器传递给对象。将关键字const 加在形参表之后,就可以将成员函数声明为常量:如: double avg_pric 阅读全文
posted @ 2012-02-29 13:15 Mr.Rico 阅读 (324) | 评论 (0) 编辑
摘要:第一章 快速入门1. endl是一个操纵符,它可以刷新与设备相关联的缓冲区。第二章 变量和基本类型C++中的保留字1. 初始化和赋值是不同的。 C++中进行初始化的方法包括复制初始化和直接初始化。 在内置类型上,这两种方式基本上没有什么差别。 但是,在自定义的类类型上,还是有很大差别的,有时候只能使用直接初始化。2. 定义与声明 定义为变量分配空间,声明向程序表明变量的类型和名字。定义也是声明:当我们定义变量时,我们就声明了它的类型和名字。 比如: extern int i; 这儿是声明但是没有定义i,这儿告诉程序变量i定义在了程序的其他地方。 int i; 声明并且定义了i,这样一个操作之后 阅读全文
posted @ 2012-02-29 12:55 Mr.Rico 阅读 (531) | 评论 (0) 编辑
摘要:类别[随笔分类]linux学习 阅读全文
posted @ 2012-02-28 13:53 Mr.Rico 阅读 (313) | 评论 (0) 编辑
摘要:1. const 在C和C++中的区别 C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中. 所以在C++中const修饰的量可以用在数组的定义中。 而在C中,const是一个不能被改变的普通变量,既然是变量,就要占用存储空间,所以编译器不知道编译时的值.而且,数组定义时的下标必须为常量. 在C语言中: const int size; 这个语句是正确的,因为它被C编译器看作一个声明,指明在别的地方分配存储空间.但在C++中这样写是不正确的.C++中const默认是内... 阅读全文
posted @ 2012-02-27 21:56 Mr.Rico 阅读 (11138) | 评论 (0) 编辑
摘要:2011年4月9日10:09:19c语言中的浮点数在内存中的表示(VC++编译器中):char:1个字节short:2个字节int:4字节long:4字节float:4字节(单精度)double:8字节(双精度) 参考:http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html 无论是单精度还是双精度在存储中都分为三个部分: 符号位(Sign) : 0代表正,1代表为负 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 尾数部分(Mantissa):尾数部分 其中float的存储... 阅读全文
posted @ 2012-02-27 20:39 Mr.Rico 阅读 (15283) | 评论 (8) 编辑
摘要:2011年4月9日17:42:57C中的字符串数组与字符串指针的区别 从上面的截图,我们可以看到字符数组和字符串的差别。他们的类型是不同的,比如上面的代码中,filename的类型是char[12],而pname的类型是char*,&filename的结果是数组指针,图中显示的是char[12]*。还可以发现,对于pname和p虽然是两个不同的指针,但是他们都指向同一个地址,这也是编译器投机取巧的地方,因为他们都是指向"fangzhen"这个字符串,所以编译器就只存储一次。还有&"fangzhen"的用法也是可以的。2011年4月10日1 阅读全文
posted @ 2012-02-27 20:06 Mr.Rico 阅读 (3407) | 评论 (2) 编辑
摘要:《C 语言深度解剖》这本书是一本“解开程序员面试笔试的秘密”的好书。作者陈正冲老师提出“以含金量勇敢挑战国内外同类书籍”,确实,这本书中的知识点都是一些在面试中常见的考点,并且很多都是我们平常不注意的点,对于我们深入理解C语言确实很有帮助。第1章关键字1.register虽然寄存器的速度非常快,但是使用register修饰符也有些限制的:register变量必须是能被CPU寄存器所接受的类型。意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度。而且register变量可能不存放在内存中,所以不能用取址运算符“&”来获取register变量的地址。2.stat 阅读全文
posted @ 2012-02-27 13:04 Mr.Rico 阅读 (1814) | 评论 (0) 编辑
摘要:第1章 C语言基础1. 概念C是很小的内核语言,并包含极少的硬件相关元素,可以说具有相当高的可移植性。比方说,C语言不提供有关文件操作或动态内存管理等语句。事实上,甚至不直接提供控制台输出和输入语句。C语言的做法是是使用扩充的标准C链接库,为各式各样的编程目的提供各种所需的函数。因为C是专门作为“系统编程”而开发的,它目前主要的用途之一就是编写”嵌入式系统程序“,这一点不会让我们感到惊讶。许多开发者把C当作可移植的,结构化的高级程序语言,以编写诸如文字处理器、数据库以及图形应用程序。第7章 函数一个源文件就是一个翻译单元。前面说过#include指令只是将文件的内容插入到#include指令. 阅读全文
posted @ 2012-02-27 09:55 Mr.Rico 阅读 (1605) | 评论 (0) 编辑
摘要:第1章 C:穿越时空的迷雾1. C语言史前阶段B 语言通过省略一些特性(如过程嵌套和一些循环结构),对BCPL语言做了 简化,并发扬了"引用数组元素相当于对指针加偏移量的引用"这个想法。B语言同时保持了BCPL语言无类型这个特点,它仅有的操作数就是机器字。 Thomposoon发明了++和--操作符,并把它加入到PDP-7的B编译器中。2. C语言的早期体验除了类型系统之外,C语言的许多其他特性是为了方便编译器设计者而建立的。主要包括(1)数组下标从0而不是从1开始。因为偏移量的概念在编译器设计者的心中已经是根深蒂固。(2)C语言的基本数据类型直接与底层硬件相对应.例如,不 阅读全文
posted @ 2012-02-26 23:03 Mr.Rico 阅读 (788) | 评论 (0) 编辑
摘要:第2章 基本概念1. 程序的执行过程经历几个阶段:首先是载入到内存中。在宿主环境中(具有操作系统的环境),这个任务由操作系统完成。那些不是存储在堆栈中的尚未初始化的变量将在这个时候得到初始值。在独立的环境中,程序的载入必须由手工安排,也可能是通过把可执行代码置入只读内存(ROM)中来完成。然后程序执行便开始。在宿主环境中,通常一个小型的启动程序与程序链接在一起,它负责处理一系列日常事务,如收集命令行参数以便使程序能够访问它们。接着,便调用main函数。现在,便开始执行程序代码。在绝大多数机器中,程序将使用一个运行时堆栈(stack),它用于存储函数的局部变量和返回地址。程序同时也可以使用静态( 阅读全文
posted @ 2012-02-26 22:35 Mr.Rico 阅读 (203) | 评论 (0) 编辑
摘要:《你必须知道的495个C语言问题》这本书中列出了495个C语言中的问题,这些问题都比较都代表性,这是真实的有人提出的问题,然后作者给出了解答。这个有对应的网站:http://c-faq-chn.sourceforge.net/ 2.12 怎样向数据文件读写结构体 使用fwrite()编写结构相对简单 fwrite(&some_struct,sizeof somestruct,1,fp); 对应的fread函数可以再把它读出来,此处fwrite受到一个结构的指针并把这个结构的内存映像作为字节流写入文件。sizeof操作符计算出结构占用的字节数。 但是这样用内存映像写出的数据文件却是不能够 阅读全文
posted @ 2012-02-26 22:30 Mr.Rico 阅读 (853) | 评论 (0) 编辑
摘要:《C程序设计-现代方法》这本C语言书是一本不错的C语言的书。其中的讲解挺有条理,并且每章后面的释疑部分真的解答了我的很多疑问。第2章 C语言基本概念1. 在某些C语言的书中,main函数的结尾使用的是exit(0),而不是return 0,二者是否一样? 当出现在main函数中时,这两种语句是完全等价的:二者都终止程序执行,并且向操作系统返回0值.2. float类型的名字是由何而来的? float是floating-point的缩写形式.有些语言中称为real类型第3章 格式化输入/输出1. 转换说明%i也可以用于读写整数,%i和%d之间的区别? 在printf格式串中使用时,二者没有区别. 阅读全文
posted @ 2012-02-26 20:56 Mr.Rico 阅读 (441) | 评论 (0) 编辑
摘要:这是阅读 《C/C++代码精髓》的记录。这本书其实更偏向于讲解C++中的相关知识。也介绍了很多C与C++的区别联系。第1章 更好的C1.简介 C++是一个混合语言,它将面向对象特征与系统编程语言混合在一起。 C语言的兼容性是C++设计的一个主要的目标,1989年Bjarne在ANSI C++委员会的主题演讲中提到,C++是“工程上的妥协”,并且必须使它“越接近C越好,但不能过度”。 C++是多范例语言:像C和Pascal一样支持过程编程,像Ada支持数据抽象和通用性(模板),像其他面向对象一样,支持继承和多态。2. 更好的CC++比C更安全,更富于表达,所以可以将它作为更好的C使用:类型安全链 阅读全文
posted @ 2012-02-26 20:21 Mr.Rico 阅读 (1991) | 评论 (0) 编辑
摘要:约瑟夫环问题:有编号从1到N的N个人坐成一圈报数,报到M的人出局,下一位再从1开始, 如此持续,直止剩下一位为止,报告此人的编号X。输入N,M,求出X。对于这个问题,有很多解法。包括一些基本的解法和一些优化的算法。基本解法一:这个方法比较直观,就是使用循环列表来模拟约瑟夫环。但是复杂度比较高,为O(m*n) 具体的代码如下:View Code /**=====================================================================================**Filename:c069_2.c**Description:**Ver. 阅读全文
posted @ 2012-02-26 12:49 Mr.Rico 阅读 (210) | 评论 (0) 编辑
摘要:这是《C Primer Plus(第5版)》的一些阅读笔记,以后可以经常看看,复习一下C语言。第一章 概览1. 目标代码、可执行文件和库2. 编译器环境(1)Unix系统上所用的编译器是cc(2)Linux系统上使用gcc编译器(3)window上一般是提供的集成编程环境IDE(4)IBM PC的DOS编译器第二章 C语言概述1. 为什么不内置输入输出语句第三章 数据和C1. C语言中的数据类型 2. 数据类型的大小具体在我的linux和window平台上的结果如下:可以看到出了long double,其余的大小都是一样的。 第8章 输入输出1. 输入输出重定向第9章 函数第12 章 存储类. 阅读全文
posted @ 2012-02-23 20:14 Mr.Rico 阅读 (139) | 评论 (0) 编辑
摘要:本文是在阅读《C陷阱与缺陷》一书的时候,觉得其中对自己比较有用的部分,然后摘录出来的。这样以后可以再次的复习。对于学好C语言挺有帮助的。 第4章 链接1. 什么是链接器2. 类型检查 几个比较有用的练习题: 阅读全文
posted @ 2012-02-23 16:01 Mr.Rico 阅读 (205) | 评论 (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 阅读 (3147) | 评论 (0) 编辑
摘要:可以使用fwrite()将一个结构体写入文件: fwrite(&some_struct,sizeof somestruct,1,fp);对应的fread函数可以再把它读出来,此处fwrite受到一个结构的指针并把这个结构的内存映像作为字节流写入文件。sizeof操作符计算出结构占用的字节数。但是这样用内存映像写出的数据文件却是不能够移植的,尤其是当结构中包含浮点成员或指针的时候。结构的内存布局跟机器和编译器都有关。不同的编译器可能使用不同数量的填充位,不同机器上基本类型的大小和字节顺序也不尽相同。因此,作为内存映像写出的结构在别的机器上(甚至是被别的编译器编译之后)不一定能被读回来。 阅读全文
posted @ 2012-02-17 16:42 Mr.Rico 阅读 (13556) | 评论 (0) 编辑
摘要:/Files/xkfz/为什么采用虚函数virtual.ppt C++中的继承与虚函数各种概念 虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段。而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个间接的指针去存取基类对象中的字段。 继承的特性 继承是面向对象中引入的重要特性之一,它的一个重要的特点就是子类是父类,父类不是子类。也就是说: 1. 如果基类指针指向子类对象(pbase=&pchild),则该指针只能调用基类定义了的函数;(因为这个地方是静态绑定,而静态绑定所依赖的就是指... 阅读全文
posted @ 2012-02-16 16:01 Mr.Rico 阅读 (4333) | 评论 (0) 编辑
摘要:在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 阅读 (4024) | 评论 (1) 编辑
摘要:最近一直在使用dropbox在实验室电脑和笔记本之间进行文件的同步。但是有些文件,比如bash的配置文件位于~/目录下,同步起来不方便,并且,为了以后重装系统的方便,我是将一些类似bashrc和vimrc的配置文件进行备份,统一存放的。然后将这些文件放入到dropbox中进行同步。但是,有时,比如突然想为一些经常用到的命令进行重命名,这个时候就要在.bashrc文件中添加alias语句的。改完.bashrc文件之后还要修改备份的文件,特别不方便。这两天在整理硬盘文件的时候,突然发现将~/目录下的.bashrc文件设为软连接,链接到所备份的文件。好,说干就干!之后我也将一些常用软件的配置文件也. 阅读全文
posted @ 2012-02-14 21:48 Mr.Rico 阅读 (1047) | 评论 (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 阅读 (597) | 评论 (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 阅读 (1363) | 评论 (1) 编辑
摘要:假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有? 解答: (1)把其中的每个字母都放入一个Hashtable里(成本是O(n)或16次操作)。然后轮询第二个字串,在Hashtable里查询每个字母,看能否找到。如果找不到,说明没有匹配成功。 (2) 假设我们有一个一定个数的字母组成字串 —— 我给每个字母分配一个素数,从2开始,往后类推。这样A将会是2,B将会是3,C将会是5,等等。现在我遍历第一个字串,把每个字母代表的素数相乘。你最 终会得到一个... 阅读全文
posted @ 2012-02-03 16:14 Mr.Rico 阅读 (4177) | 评论 (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 阅读 (665) | 评论 (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 阅读 (3627) | 评论 (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 阅读 (146) | 评论 (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 阅读 (108) | 评论 (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 阅读 (1795) | 评论 (0) 编辑