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