“C专家编程》读笔记[1).doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
“C专家编程》读笔记[1)

HYPERLINK /LShang/archive/2011/12/08/LShang.html《C专家编程》读书笔记(一) By:LShang Blog:HYPERLINK /LShang/LShang C 语言的发展 1965-7(BCPL)-1969(B)-1971(New B)-1972-3(早期的C)-1976-9(KC)-1983-9(ANSI C)- C 的许多特性是为了方便编译器设计者而建立的 数组下标从0开始(定义数组a[100]的合法范围是a[0] ~ a[99]) 基本数据类型直接与底层硬件对应 auto关键字只对创建符号表入口的编译器设计者有意义(进入程序块时自动分配内存) 表达式中的数组名可以看作是指针(并非永远如此) float会被自动扩展为double(仅在最初如此,ANSI C不再如此) 不允许嵌套函数(函数内部不允许包含另一个函数的定义) register关键字(可以提供程序中的热门变量,使之将其存放到寄存器中。) 关于register关键字,??中说 “这个设计可以说是一个失误,如果让编译器在使用各个变量时自动处理寄存器的分配工作,显然比一经声明就把这类变量在生命期内始终保留在寄存器里要好。使用register关键字,简化了编译器,却把包袱丢给了程序员。” C 编译器不曾实现的一些功能必须通过其他途径实现: 标准 I/O 库和 C 预处理器 最早的可移植 I/O 库出现在1972年,由 Mike Lesk 编写 C 预处理器主要实现三个功能 字符串替换 头文件包含 通用代码模板的扩展(宏) 宏的实际参数只按照原样输出。 在宏的扩展中,空格会对扩展的结果造成很大影响。 #define a(y) a_expanded(y) a(x) //被扩展为 a_expanded(x); //而 #define a (y) a_expanded(y) //则被扩展为 (y) a_expanded (y)(x); HYPERLINK javascript:void(0);复制代码 书中建议: 宏最好只用于命名常量,并为一些适当的结构提供简捷的记法。 宏名应该大写,这样便容易与函数名区分 千万不要使用 C 预处理器来修改语言的基础结构,因为这样 C 就不再是 C KR C 和 ANSI C 1978年,《The C Program Language》一书出版,其作者 Brian Kernighan 和 Dennis Ritchie 名声大噪。这个版本的 C 被称为 KR C 1983年,美国国家标准化组织(ANSI)成立了 C 语言工作小组,开始了 C 语言的标准化工作 1989年12月,ANSI委员会接受了 C 语言标准草案,随后国际标准化组织 ISO 也接纳了 ANSI C 标准(C 89标准) 1990年初,ANSI 重新采纳了 ISO C(删除掉了Rationale一节),所以原则上说日常所说的标准 C 应是 ISO C 而不是 ANSI C KR C 和 ANSI C 的区别 函数原型的增加 关键字的增加 安静的改变 其他区别 原型是函数声明的扩展,这样不仅函数名和返回类型已知,所有形参类型也是已知的 参数传递的过程类似于赋值 每个实参都应该具有自己的类型,这样它的值就可以赋值给与它所对应的形参类型的对象(该对象的类型不能含有限定符) 参数传递时的相容与不相容 char *cp; constchar *ccp; ccp = cp; //可以相容 HYPERLINK javascript:void(0);复制代码 char * 是一个指向没有限定符的 char 型指针 const char * 是一个指向有 const 限定符的 char 型指针 char 类型与 char 类型可以相容,左操作数(形参)具有右操作数(实参)所指向类型的限定符(无限定符),再加上自身的限定符(const)。 char *cp; constchar *ccp; cp = ccp; //不可以相容 HYPERLINK javascript:void(0);复制代码 char * 是一个指向没有限定符的 char 型指针 const char * 是一个指向有 const 限定符的 char 型指针 char 类型与 char 类型可以相容,左操作数(形参)不具有右操作数(实参)所指向类型的限定符(const) 测试代码 #include stdio.h int main() { char *cp = {By LShang}; constchar *ccp = cp; printf(%s\n,ccp); return0; } HYPERLINK javascript:void(

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档