您的位置:首页 > 理论基础 > 数据结构算法

《The C Programming Language》读书笔记1

2004-07-15 14:28 344 查看





































我爱北京天安门





天安门上太阳升





伟大领袖毛主席





指引我们向前进






































<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">笔记范围:《</span><span lang="EN" style="FONT-SIZE: 14pt">The C Programming Language</span><span
style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">》第一章</span><span lang="EN" style="FONT-SIZE: 14pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 14pt"><o:p> </o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 1.5"><span style="FONT-SIZE: 14pt; FONT-FAMILY:
宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应该说,算上这次,我应该是第四次读这本书了,每次重读都收获不少。都引起我新的思考,很难想象这本一本技术小书给人留下的感觉是如此深刻,如此令人回味,本章的内容是很容易理解的概念,对于编程学习者是最起码的知识,但是有些东西还是被初学者忽视。以至于在各个技术社区的初学者问题中层出不断。其实这些东西,在第一章就得到了比较完整的解释,下面只是把他们提出来强调一下,</span><span
lang="EN" style="FONT-SIZE: 14pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63.75pt; TEXT-INDENT: -42.75pt; tab-stops: list 63.75pt; mso-list: l0 level1 lfo1"><span lang="EN" style="FONT-SIZE: 14pt; mso-bidi-font-family: 宋体"><span
style="mso-list: Ignore">第一.</span></span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于循环终止。在很多书籍中都存在这样的循环语句:</span><span lang="EN" style="FONT-SIZE: 14pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63.75pt"><span lang="EN" style="FONT-SIZE: 14pt">while ( getchar() != EOF )<span style="mso-spacerun: yes">  </span>{….}<o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63.75pt"><span
style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很多人不明白这个</span><span lang="EN" style="FONT-SIZE: 14pt">EOF</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family:
'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为何物?具体如何操作?以至于让上面的语句变成了无限循环,呵呵,其实</span><span lang="EN" style="FONT-SIZE: 14pt">EOF</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family:
'Times New Roman'">。是文件结束符(</span><span lang="EN" style="FONT-SIZE: 14pt">end of file</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">),在第七章有说明。其为系统常量。值为</span><span lang="EN"
style="FONT-SIZE: 14pt">-1</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,当然你在终端输入</span><span lang="EN" style="FONT-SIZE: 14pt">-1</span><span style="FONT-SIZE: 14pt;
FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,循环并未结束,</span><span lang="EN" style="FONT-SIZE: 14pt">why</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family:
'Times New Roman'">?</span><span lang="EN" style="FONT-SIZE: 14pt">how to do</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?恩,你在《</span><span lang="EN" style="FONT-SIZE:
14pt">c</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">专家编程》里会了解到,</span><span lang="EN" style="FONT-SIZE: 14pt">c</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体;
mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的第一批使用者都是系统设计者和编译器设计者。在他们的理念里,信息往往以文件为单位的。这个标志只是文件结束的状态,一般不由用户提供。而键盘等输入端在</span><span lang="EN" style="FONT-SIZE: 14pt">os</span><span style="FONT-SIZE: 14pt; FONT-FAMILY:
宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中是个极其特殊的文件。需要用户显式标志文件结束。说是系统常量当然有着系统依赖性,因此不同的系统标志方式就完全不同。</span><span lang="EN" style="FONT-SIZE: 14pt">Windows</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family:
'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下是</span><span lang="EN" style="FONT-SIZE: 14pt">ctrl+z</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><span
lang="EN" style="FONT-SIZE: 14pt">linux</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下是</span><span lang="EN" style="FONT-SIZE: 14pt">ctrl+D.</span><span style="FONT-SIZE:
14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外</span><span lang="EN" style="FONT-SIZE: 14pt">EOF</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family:
'Times New Roman'">其实不用显式说明。上面的代码与此完全等价:</span><span lang="EN" style="FONT-SIZE: 14pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63.75pt"><span lang="EN" style="FONT-SIZE: 14pt">while( getchar() ) {……}<o:p></o:p></span></p> <p
class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63.75pt; TEXT-INDENT: -42.75pt; tab-stops: list 63.75pt; mso-list: l0 level1 lfo1"><span lang="EN" style="FONT-SIZE: 14pt; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">第二.</span></span><span style="FONT-SIZE:
14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">声明和定义。尽管这个问题地球人都知道,但是真正说的清楚的人并不多。有人认为变量的声明和定义没有什么区别。有人认为这个与初始化有关系(我曾经就这样白痴,汗~~~),对于后者那就是根本就不明白这两个概念,声明只是给编译器一个提示,有这么个名字存在于程序中,和运行环境毫无关系。可以重复出现,定义是具体分配内存空间和指定了变量的位子(左值),在同一域中只能出现一次;对于前者的观点。在单文件程序中。几乎找不到错误。但如果你把这样的句子放人头文件,</span><span
lang="EN" style="FONT-SIZE: 14pt">int a</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">;一旦这个头文件被重复包涵。必然出现链接错误。其实这样:</span><span lang="EN" style="FONT-SIZE: 14pt"><br
/>extern int a;//</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">声明</span><span lang="EN" style="FONT-SIZE: 14pt"><br />int a;//</span><span style="FONT-SIZE: 14pt; FONT-FAMILY:
宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义</span><span lang="EN" style="FONT-SIZE: 14pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63.75pt; TEXT-INDENT: -42.75pt; tab-stops: list
63.75pt; mso-list: l0 level1 lfo1"><span lang="EN" style="FONT-SIZE: 14pt; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">第三.</span></span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family:
'Times New Roman'">字符数组和字符串。有人认为这两个是同一概念,是这样吗?不,完全不是,前者为容器(数据结构)</span><span lang="EN" style="FONT-SIZE: 14pt">,</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后者为数据。这样说也许太理论化,好,我们来改写下那个</span><span
lang="EN" style="FONT-SIZE: 14pt">hello world<br /><br />#include <stdio.h><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 42pt; mso-char-indent-count: 3.0; mso-para-margin-left: 2.0gd"><span lang="EN" style="FONT-SIZE:
14pt">#include <stdlib.h><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 49pt; mso-char-indent-count: 3.5; mso-para-margin-left: 2.0gd">int main()
{
    printf( "/0hello world " );
  
system("pause");
return 0;
}
      呵呵,什么也没有?是的。还记得字符串是怎么结束的吗?/0 "/0hello world "是个常量数组。但是字符串却是“”。字符数组和字符长度是不一样的,
这章尽管非常简单,但是每个例子都经典之作,你能从代码中学到文字中不能学到的东西。建议你每个都抄一遍,
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息