01 2013 档案

摘要:一、数学库<math.h>数学库包含许多有用的数学函数。头文件math.h提供了这些函数的函数声明或原型。注意角度的单位为弧度。ANSI C标准数学函数原型描述原型描述double acos (double x)返回余弦值为x的角度值double asin (double x)返回正弦值为x的角度值double atan (double x)返回正切值为x的角度值double atan2 (double y, double x)返回正切值为y/x的角度值double cos (double x)返回x的余弦值double sin (double x)返回x的正弦值double ta 阅读全文
posted @ 2013-01-28 16:45 qwertWZ 阅读(5010) 评论(0) 推荐(0) 编辑
摘要:ANSI C标准不仅描述了C语言,还描述了C预处理器的工作机制。预处理器可以根据您的请求包含其他文件,还可以选择让编译器处理哪些代码。预处理器不能理解C,它一般是接受一些文本并将其转换成其他文本。一、翻译程序的第一步在程序作预处理之前,代码会先被进行几次翻译处理:1. 编译器首先把源代码中出现的字符映射到源字符集。该过程处理多字节字符和三元符(trigraph)扩展。2. 编译器查找反斜线后紧跟换行的实例并删除这些实例。也就是说,将类似下面的两个物理行:printf ("That's wond\erful!\n");转换成一个逻辑行(logical line):pr 阅读全文
posted @ 2013-01-26 20:22 qwertWZ 阅读(2794) 评论(0) 推荐(1) 编辑
摘要:1. 位字段(bit field)是一个signed int或unsigned int中一组相邻的位(C99还允许_Bool类型位字段)。C使用unsigned int作为给位字段结构分配内存空间的基本单位。位字段由一个结构声明建立,该结构声明为每个字段提供标签,并决定字段的宽度。例如,以下声明建立了4个1位字段:struct { unsinged int autfd : 1; unsinged int autfc : 1; unsinged int autfn : 1; unsinged int autfs : 1;} prnt;该定义使prnt包含4个1位字段。现在... 阅读全文
posted @ 2013-01-26 15:49 qwertWZ 阅读(2662) 评论(0) 推荐(0) 编辑
摘要:声明指向函数的指针:void ToUpper (char *); // 把字符串转换为大写void (*pf) (char *); // 指向函数的指针第一对圆括号将运算符*和pf结合在一起,这意味着pf是一个指向函数的指针。这就使得(*pf)是一个函数,并使(char *)作为该函数的参量列表,void作为返回类型。创建这类声明最简单的方法是注意它用表达式(*Pf)代替函数名ToUpper。根据运算符优先级的规则,第一个括号是必须的,省略括号会导致完全不同的解释:void *pf (char *); // pf是返回一个指针的函数有了函数指针后,可以把适当类型的函数的地址赋给它。在这种场合中 阅读全文
posted @ 2013-01-23 20:51 qwertWZ 阅读(398) 评论(0) 推荐(0) 编辑
摘要:声明时可以使用的修饰符修饰符含义*表示一个指针()表示一个函数[]表示一个数组C允许使用多个修饰符,这就使得可以创建如下各种各样的类型:int board[8][8]; // int数组的数组int **ptr; // 指向int的指针的指针int *risks[10]; // 具有10个元素的数组,每个元素是一个指向int的指针int (* risks)[10]; // 一个指针,指向具有10个元素的int数组int * oof[3][4]; // 一个3*4的数组,每个元素是一个指向int的指针int (* uuf)[3][4]; // 一个指针,指向3*4的int数组int (* uof 阅读全文
posted @ 2013-01-21 12:11 qwertWZ 阅读(313) 评论(0) 推荐(0) 编辑
摘要:C使用术语名字空间(namespace)来识别一个名字的程序部分。作用域是这个概念的一部分:名字相同但具有不同作用域的两个变量不好冲突;而名字相同并在相同作用域中的两个变量就会冲突。名字空间是分类别的。在一个特定的作用域内的结构标记、联合标记以及枚举标记都共享同一个名字空间,而且这个名字空间与普通变量使用的名字空间是不同的。这意味着,可以在同一个作用域内对一个变量和一个标记使用同一个名字,而不会产生错误;但是不能在同一个作用域内使用名字相同的两个标记或名字相同的两个变来能够。例如,在C中下面的语句不会产生冲突:struct rect {double x; double y;};int rect 阅读全文
posted @ 2013-01-21 00:22 qwertWZ 阅读(506) 评论(0) 推荐(0) 编辑
摘要:C99具有一个称为伸缩型数组成员(flexible array member)的新特性。利用这一新特性可以声明最后一个成员是一个具有特殊属性的数组的结构。该数组成员的特殊属性之一是它不立即存在。第二个特殊属性是您可以编写适当的代码使用这个伸缩型数组成员,就像它确实存在并且拥有您需要的任何数目的元素一样。声明一个伸缩型数组成员的规则:伸缩型数组成员必须是最后一个数组成员。结构中必须至少有一个其他成员。伸缩型数组就像普通数组一样被声明,除了它的方括号是空的。下面是一个例子:// flexmemb.c 伸缩型数组成员#include <stdio.h>#include <stdli 阅读全文
posted @ 2013-01-21 00:06 qwertWZ 阅读(1369) 评论(0) 推荐(0) 编辑
摘要:函数原型:int scanf (const char * restrict format, ...)1.控制字符串和参数列表跟printf( )一样,scanf( )使用控制字符串和参数列表。但和printf( )的区别是,printf( )函数使用变量名、变量和表达式;而scanf( )函数使用指... 阅读全文
posted @ 2013-01-20 21:18 qwertWZ 阅读(1754) 评论(0) 推荐(0) 编辑
摘要:FILE * fopen (const char * restrict filename, const char * restrict modes)打开一个文件流。它的第一个参数是要打开的文件名;更确切地说,是包含该文件名的字符串的地址。第二个参数是用于指定文件打开模式的一个字符串。返回值为文件指针。C库提供了一些可能的模式:模式字符串意义"r"打开一个文本文件,只可以读取文件。文件必须存在。"w"打开一个文本文件,只可以写入文件,先将文件的长度截为零。如果该文件不存在则先创建之。"a"打开一个文本文件,只可以向已有文件的结尾追加内容 阅读全文
posted @ 2013-01-20 00:17 qwertWZ 阅读(2121) 评论(0) 推荐(0) 编辑
摘要:C有5种存储类:自动——在一个代码块内(或在一个函数头部作为参量)声明的变量,无论有没有存储类型修饰符auto,都属于自动存储类。该类具有自动存储时期、代码作用域和空链接。如未经初始化,它的值是不定的。寄存器——在一个代码块内(或在一个函数头部作为参量)使用存储类修饰符register声明的变量属于寄存器存储类。该类具有自动存储时期、代码作用域和空链接,而且无法获得其地址。把一个变量声明为寄存器变量可以指示(建议)编译器提供可用的最快访问。如未经初始化,它的值是不定的。静态、空链接——在一个代码块内使用存储类修饰符static声明的变量属于静态空链接存储类。该类具有静态存储时期、代码作用域和空 阅读全文
posted @ 2013-01-19 23:35 qwertWZ 阅读(321) 评论(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 阅读(325) 评论(0) 推荐(0) 编辑
摘要:char pets1[12] = "nice cat.";char *pets2 = "nice cat.";字符串的数组形式(pets1[12])在计算机内存中被分配一个有若干个元素的数组。每个元素都被初始化为相应的字符。通常,被引用的字符串存储在可执行文件的数据段部分;当程序被加载到内存中时,字符串也被加载到内存中。被引用的字符串被成为位于静态存储区。但是在程序开始运行之后才为数组分配存储空间。这时候,会把被引用的字符串复制到数组中。此后,编译器会把数组名pets1看作是数组首元素的地址&pets1[0]的同义词。这里最重要的一点是,在数组形 阅读全文
posted @ 2013-01-16 23:45 qwertWZ 阅读(314) 评论(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 阅读(1697) 评论(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 阅读(762) 评论(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 阅读(376) 评论(0) 推荐(0) 编辑
摘要:ANSI C 标准向 scanf() 增加了一种新特性,称为扫描集(scanset)。扫描集定义一个字符集合,可由 scanf() 读入其中允许的字符并赋给对应字符数组(类似于有过滤的%s)。扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。例如,以下的扫描集使scanf()只读入由字符A、B和C组成的字符串:%[ABC]使用扫描集时,scanf()连续吃进集合中的字符并放入对应的字符数组,直到发现不在集合中的字符为止(即扫描集仅读取匹配的字符)。最终读入字符组成的字符串,并停止在与扫描集不匹配的位置。用字符^可以说明补集。把^字符放为扫描集的第一字符时,构成其它字符组成的命令的 阅读全文
posted @ 2013-01-15 17:57 qwertWZ 阅读(821) 评论(0) 推荐(0) 编辑
摘要:简介 restrict是C99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改。这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码。如"int *restrict ptr",ptr指向的内存单元只能被ptr访问到,任何同样指向这个内存单元的其他指针都是未定义的(即无效的)。restrict的出现是因为C语言本身固有的缺陷,C程序员应当主动地规避这个缺陷,而编译器也会很配合地优化你的代码。 一个C库中 阅读全文
posted @ 2013-01-15 00:08 qwertWZ 阅读(303) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示