C
daheiantian
这个作者很懒,什么都没留下…
展开
-
C语言中鲜为人知的“三字母词” (trigraph sequences)
Technorati 标签: C语言,三字母词,trigraph sequences,三联符序列,C99,ANSI C 在ANSI标准中,定义了“三字母词”,或者成为“三联符序列”,英文为"trigraph sequences"。目的主要是为了在一些特定的字符集中,比如一些七位代码集中,解决一些特定字符的输入问题。 也许是由于这些字符集我们基本上用不到,所以在大多数C语言的书籍中,我们都看不到对“三字母词”的讲解。这里资料来源于参考ANSI C99标准(即传说中的《A原创 2010-12-17 14:57:00 · 12326 阅读 · 6 评论 -
C语言的预编译
Technorati 标签: C,预编译,宏,文件替换,条件编译 由“源代码”到“可执行文件”的过程包括四个步骤:预编译、编译、汇编、链接。所以,首先就应该清楚的首要问题就是:预编译只是对程序的文本起作用,换句话说就是,预编译阶段仅仅对源代码的单词进行变换,而不是对程序中的变量、函数等。 预编译指令的基本知识不作详细介绍,只稍作汇总,重点是后面的我能想到的 使用时的注意事项。 1. 基本内容 预编译指令基本分类如下 类别原创 2011-02-09 12:31:00 · 8525 阅读 · 0 评论 -
C语言的布尔类型(_Bool)
Technorati 标签: C,布尔,boolean,_Bool,stdbool.h 也许很多人都和我一样,从C99标准开始,不知道C语言已经有了布尔型,类型名字为“_Bool”。 在此之前的C语言中,使用整型int来表示真假。在输入时:使用非零值表示真;零值表示假。在输出时:真的结果是1,假的结果是0;(这里我所说的“输入”,意思是:当在一个需要布尔值的地方,比如 if 条件判断中的的条件;“输出”的意思是:程序的逻辑表达式返回的结果,比如 a==b的返回结果,只有原创 2011-02-05 13:04:00 · 157003 阅读 · 9 评论 -
为什么用 递归 计算“阶乘”和“斐波那契数列”是不合适的?
Technorati 标签: 递归,阶乘,斐波那契数列,fibonacci 《C和指针》的作者Kenneth A. Reek说,他认为这是很不幸的:“计算阶乘时不能提供任何优越之处;在斐波那契数列中,使用递归效率非常非常低”。 对于计算斐波那契数,使用递归和使用迭代的效率有可能相差几十万倍。原创 2011-01-12 14:41:00 · 4691 阅读 · 1 评论 -
C和Java中函数的可变参数列表
Technorati 标签: C语言,函数,可变参数列表,stdarg 所谓“可变参数列表”就是指函数的形参的数目和类型是不确定的。printf函数就是一个可变参数的函数,第一个参数是格式化字符串,后面可以跟任意数目的参数。而我们平时使用的函数,其参数的数目和类型都是固定的,一旦声明,无法改变。 1. 先看一个问题 计算一系列值的平均值,注意:这些值不是保存在数组中的,而是在参数中显示的传递。 常见的实现方式可能如下:/*参数: n_values 可变参数原创 2011-01-08 14:18:00 · 4768 阅读 · 1 评论 -
C语言中结构体 自引用 和 相互引用
Technorati 标签: C语言,结构体,自引用,相互引用,self reference,mutual reference 结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。 结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。 1. 自引用 结构体 1.1 不使用typedef时 错误的方式: struct tag_1{ struct tag_1 A;原创 2011-01-27 11:52:00 · 25098 阅读 · 3 评论 -
回溯法解决“八皇后”问题
Technorati 标签: 回溯法,backtrack,八皇后,eight queens puzzle “回溯法”和“八皇后”问题本身不再多做介绍,相信很多人都知道,尤其是学习过数据结构的人。如果还不清楚可以google或者baidu一下,亦或是找本数据结构的书看一下。 “八皇后”问题:可以简单的理解为在一个8*8的棋盘上,放8个旗子(国际象棋中称为皇后queen),要求这8个棋子中任意两个都不在同一行、列、斜线上。 “回溯法”用在这里的思路是:原创 2011-01-23 12:47:00 · 2495 阅读 · 0 评论 -
C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(下)
Technorati 标签: C,标识符,作用域,命名空间,链接属性,生命周期,存储类型,scope,name space,linkage,storage durations,lifetime 3. 标识符的链接属性 主要用于处理多次声明相同的标识符名称后,如何判断这些标识符是否是同一个。 原文对链接属性(linkage)的定义如下:An identifier declared in different scopes or in the same scope more t原创 2011-01-20 13:40:00 · 7011 阅读 · 9 评论 -
C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
Technorati 标签: C,标识符,作用域,命名空间,链接属性,存储类型,scope,name space,linkage,storage durations,lifetime 无论学习哪一种语言,都免不了要讨论这些问题。而且这些问题,深究起来有时也让我们很迷惑。 标识符的定义无需多讲,只需注意不仅仅是指变量,还有函数。 1. 标识符的作用域 作用域是指允许对标识符进行访问的位置范围。按照C99(章节6.2.1),C语言的作用域共有 4 种类型:文原创 2011-01-16 14:44:00 · 7933 阅读 · 7 评论 -
《C和指针》快速入门的例子分析及其扩展
Technorati 标签: C和指针;快速入门;例子;扩展;字符串 如果想深入理解C语言的指针,很多人会推荐你读《C和指针》。 本书在第一章给出了一个快速入门的例子,虽然作者的目的是让读者通过这个例子快速的了解C语言的语法情况,但是这个例子本身的处理逻辑、尤其是一些细节,还是比较晦涩难懂(尽管个人觉着这是一个不错的例子),希望这篇文章能够在逻辑上给需要的人提供一些帮助。至于语法方面,这里不再做解释,如果有需要的话,还是去读原书吧,书上比较详细。最后再总结一下来自练习题的原创 2011-01-04 12:27:00 · 3238 阅读 · 0 评论 -
字符串赋值给字符指针(char *a="hello")的正确理解方式
Technorati 标签: 字符串,数组,地址,char *; 对于语句 char *a=“hello”; 对于这个声明方式,会造成的误解是:声明了一个字符指针,将“字符串”赋值给 指针表达式”*a”。但正解是:声明了一个字符指针后,并用字符串常量的第一个字符的地址赋值给指针变量a。 这里有两点需要考虑清楚的地方:①*a只是指向一个字符。举例如下: #include #include int main(void){ char *a="bcd"; print原创 2010-12-28 14:42:00 · 24468 阅读 · 8 评论 -
C语言有关指针的变量声明中的几个易错点
Technorati 标签: 指针,typedef,const,define 我们都知道,至少听说过指针对于C语言中的重要意义,但是在使用指针时却唱唱让我们痛不欲生,这里有几个在声明指针有关的变量时易错的地方。 1. int* 和 int * (注意空格的位置) 对于单变量声明,即一条语句中只声明一个指针变量的情况,没有区别;原因是C语言允许形式的自由性。即以下两种声明方式效果相同。 int *a;int* a; 对于一条语句中声明原创 2010-12-25 10:34:00 · 6829 阅读 · 0 评论 -
C语言的命令行参数
命令行参数的最大作用就是让我们可以在程序之外控制程序,例如linux或者dos中我们经常使用的命令,从本质上将是一个程序;而我们使用的参数,就是该命令(对应的程序)的命令行参数。 正是由于命令行的这么重要的作用,所以它成为各种编程语言不可缺少的功能,只是实现细节上略有不同,但大体上都是一样的,而且都比较简单。 1. 先想一想 1.1 程序中在哪里接收命令行参数(where) 命令行参数,顾名思义,就是在命令行调用程序时传递的参数,那么谁来接收呢,原创 2011-02-13 12:38:00 · 12355 阅读 · 4 评论