摘要: C99具有一个称为伸缩型数组成员(flexible array member)的新特性。利用这一新特性可以声明最后一个成员是一个具有特殊属性的数组的结构。该数组成员的特殊属性之一是它不立即存在。第二个特殊属性是您可以编写适当的代码使用这个伸缩型数组成员,就像它确实存在并且拥有您需要的任何数目的元素一样。声明一个伸缩型数组成员的规则:伸缩型数组成员必须是最后一个数组成员。结构中必须至少有一个其他成员。伸缩型数组就像普通数组一样被声明,除了它的方括号是空的。下面是一个例子:// flexmemb.c 伸缩型数组成员#include <stdio.h>#include <stdli 阅读全文
posted @ 2013-01-21 00:06 qwertWZ 阅读(1353) 评论(0) 推荐(0) 编辑
摘要: 函数原型:int scanf (const char * restrict format, ...)1.控制字符串和参数列表跟printf( )一样,scanf( )使用控制字符串和参数列表。但和printf( )的区别是,printf( )函数使用变量名、变量和表达式;而scanf( )函数使用指... 阅读全文
posted @ 2013-01-20 21:18 qwertWZ 阅读(1737) 评论(0) 推荐(0) 编辑
摘要: FILE * fopen (const char * restrict filename, const char * restrict modes)打开一个文件流。它的第一个参数是要打开的文件名;更确切地说,是包含该文件名的字符串的地址。第二个参数是用于指定文件打开模式的一个字符串。返回值为文件指针。C库提供了一些可能的模式:模式字符串意义"r"打开一个文本文件,只可以读取文件。文件必须存在。"w"打开一个文本文件,只可以写入文件,先将文件的长度截为零。如果该文件不存在则先创建之。"a"打开一个文本文件,只可以向已有文件的结尾追加内容 阅读全文
posted @ 2013-01-20 00:17 qwertWZ 阅读(2115) 评论(0) 推荐(0) 编辑
摘要: C有5种存储类:自动——在一个代码块内(或在一个函数头部作为参量)声明的变量,无论有没有存储类型修饰符auto,都属于自动存储类。该类具有自动存储时期、代码作用域和空链接。如未经初始化,它的值是不定的。寄存器——在一个代码块内(或在一个函数头部作为参量)使用存储类修饰符register声明的变量属于寄存器存储类。该类具有自动存储时期、代码作用域和空链接,而且无法获得其地址。把一个变量声明为寄存器变量可以指示(建议)编译器提供可用的最快访问。如未经初始化,它的值是不定的。静态、空链接——在一个代码块内使用存储类修饰符static声明的变量属于静态空链接存储类。该类具有静态存储时期、代码作用域和空 阅读全文
posted @ 2013-01-19 23:35 qwertWZ 阅读(316) 评论(0) 推荐(0) 编辑
摘要: C99允许将类型限定词和存储类限定词static等放在函数原型和函数头部的形式参量所属的初始方括号内。对于类型限定词的情形,这样做为已有功能提供了一个可选语法。例如,下面是一个使用旧语法的声明:void ofmouth (int * const a1, int * restrict a2, int n); // 以前的风格它表明a1是一个指向int的const指针,a2是一个受限指针。等价的新语法如下:void ofmouth (int a1[const], int a2[restrict], int n); // C99允许static的情形是不同的,因为它引发了一些新问题。例如,考虑如下原 阅读全文
posted @ 2013-01-19 23:19 qwertWZ 阅读(316) 评论(0) 推荐(0) 编辑
摘要: char pets1[12] = "nice cat.";char *pets2 = "nice cat.";字符串的数组形式(pets1[12])在计算机内存中被分配一个有若干个元素的数组。每个元素都被初始化为相应的字符。通常,被引用的字符串存储在可执行文件的数据段部分;当程序被加载到内存中时,字符串也被加载到内存中。被引用的字符串被成为位于静态存储区。但是在程序开始运行之后才为数组分配存储空间。这时候,会把被引用的字符串复制到数组中。此后,编译器会把数组名pets1看作是数组首元素的地址&pets1[0]的同义词。这里最重要的一点是,在数组形 阅读全文
posted @ 2013-01-16 23:45 qwertWZ 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 1. 假如需要向带有一个int参量的函数传递一个值,您可以传递一个int变量,也可以传递一个int常量,比如5。在C99标准之前,数组参数的情况是不相同的:可以传递数组,但没有所谓的数组常量可供传递。C99新增了复合文字(compound literal)。文字是非符号常量,例如5是int类型的文字,81.3是double类型的文字,'Y'是char类型的文字。开发C99标准的委员会认为,如果有能够表示数组和结构内容的复合文字,那么在编写程序时将更为方便。对于数组来说,复合文字看起来像是在数组的初始化列表前面加上用圆括号括起来的类型名。例如,下面是普通数组的声明方法:int d 阅读全文
posted @ 2013-01-16 22:41 qwertWZ 阅读(1684) 评论(0) 推荐(0) 编辑
摘要: C99增加了一种新特性:指定初始化项目(designated initializer)。此特性允许选择对某些元素进行初始化。数组的指定初始化项目例如:要对数组的最后一个元素初始化。按照传统的C初始化语法,需要对每一个元素都初始化之后,才可以对最后的元素进行初始化:int arr[6] = {0, 0, 0, 0, 0, 212} // 传统语法而C99规定,在初始化列表中使用带有方括号的元素下标可以指定某个特定的元素:int arr[6] = {[5] = 212}; // 把arr[5]初始化为212对于通常的初始化,在初始化一个或多个元素后,未经初始化的元素都将被设置为0。附加的指定初始化 阅读全文
posted @ 2013-01-16 22:24 qwertWZ 阅读(732) 评论(0) 推荐(0) 编辑
摘要: C99识别两种类型的浮点数:实数浮点数类型和复浮点数类(<complex.h>)。两种类型共同组成了浮点类型。复浮点数具有两个部分:一个实部和一个虚部。C99内部使用一个二维数组来表示复数,第一个部分为实部,第二个部分作为虚部。有3中复浮点类型:float _Complex代表实部和虚部都是float值double _Complex代表实部和虚部都是double值long _Complex代表实部和虚部都是long double值虚数只有虚部。这3中类型是:float _Imaginary代表虚部是float值double _Imaginary代表虚部是double值long _I 阅读全文
posted @ 2013-01-16 22:20 qwertWZ 阅读(364) 评论(0) 推荐(0) 编辑
摘要: ANSI C 标准向 scanf() 增加了一种新特性,称为扫描集(scanset)。扫描集定义一个字符集合,可由 scanf() 读入其中允许的字符并赋给对应字符数组(类似于有过滤的%s)。扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。例如,以下的扫描集使scanf()只读入由字符A、B和C组成的字符串:%[ABC]使用扫描集时,scanf()连续吃进集合中的字符并放入对应的字符数组,直到发现不在集合中的字符为止(即扫描集仅读取匹配的字符)。最终读入字符组成的字符串,并停止在与扫描集不匹配的位置。用字符^可以说明补集。把^字符放为扫描集的第一字符时,构成其它字符组成的命令的 阅读全文
posted @ 2013-01-15 17:57 qwertWZ 阅读(797) 评论(0) 推荐(0) 编辑
摘要: 简介 restrict是C99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改。这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码。如"int *restrict ptr",ptr指向的内存单元只能被ptr访问到,任何同样指向这个内存单元的其他指针都是未定义的(即无效的)。restrict的出现是因为C语言本身固有的缺陷,C程序员应当主动地规避这个缺陷,而编译器也会很配合地优化你的代码。 一个C库中 阅读全文
posted @ 2013-01-15 00:08 qwertWZ 阅读(295) 评论(0) 推荐(0) 编辑
摘要: Yum(Yellow dog Updater, Modified) 是一个在Fedora中的字符前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。软件包来源可供 Yum 下载的软件包包括Fedora本身的软件包以及源自rpmfusion等非官方软件仓库的软件包,全部是由Linux社区维护的,并且基本是自由软件。所有的包都有一个独立的 GPG 签名,主要是为了用户的系统安全。对于 Fedora core 4 及更高版本的用户,来自新软件仓库的签名是自动导入并安装的。图形化前端Yum 的 阅读全文
posted @ 2012-12-31 18:02 qwertWZ 阅读(2373) 评论(0) 推荐(0) 编辑
摘要: 命令模式的定义:Encapsulat a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。)命令模式的通用类图: 三种角色: Receiver 接受者角色,命令传递到这里被执行。 Command 命令角色,需要执行的所有命令都在这里声明。 阅读全文
posted @ 2012-12-31 17:50 qwertWZ 阅读(471) 评论(0) 推荐(0) 编辑
摘要: 中介者模式的定义:Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.(用一个中介对象封装一系列的对象交互,中介者是各对象不需要显示地相互作用,从而使其耦合松散,并且可以独立地改变它们之间的交互。)通用类图:中介者模式中的角色: 阅读全文
posted @ 2012-12-30 23:11 qwertWZ 阅读(475) 评论(0) 推荐(0) 编辑
摘要: 第13章 原型模式 原型模式(Prototype Pattern)的定义如下: Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.(用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。) 原型模式的核心是一个clone方法,通过该方法进行对象的拷贝,Java提供了一个Cloneable接口来标示这个对象是可拷贝的。Cloneable接口一个方法都没有,只是一个标记作用。方法是覆盖clone()方.. 阅读全文
posted @ 2012-12-27 17:03 qwertWZ 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 第12章 代理模式 代理模式(Proxy Pattern)的定义如下: Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。) 代理模式也叫做委托模式,它是一种基本设计技巧。 该模式下三种角色的定义: Subjec... 阅读全文
posted @ 2012-12-27 16:15 qwertWZ 阅读(511) 评论(0) 推荐(0) 编辑
摘要: 第11章 建造者模式 建造者模式(Builder Pattern),也叫生成器模式,定义如下: Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复... 阅读全文
posted @ 2012-12-27 16:12 qwertWZ 阅读(457) 评论(0) 推荐(0) 编辑
摘要: 第10章 模版方法模式 模版方法模式(Template Method Pattern): Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclassed redefine certain steps of an algo... 阅读全文
posted @ 2012-12-27 16:11 qwertWZ 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 第9章 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern): Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,并且无需指定它们的具体类。... 阅读全文
posted @ 2012-12-27 16:11 qwertWZ 阅读(524) 评论(0) 推荐(0) 编辑
摘要: 第8章工厂方法模式 工厂方法模式: Define an interface for creating an object, but letsubclasseddecide which class to instantiate. Factory Method lets a class defer instantiation tosubclassed.(定义一个用于创建对象的接口,让子类... 阅读全文
posted @ 2012-12-27 16:10 qwertWZ 阅读(2710) 评论(0) 推荐(0) 编辑