绿林网

《C和指针》读后感100字

《C和指针》读后感100字

《C和指针》是一本由著作,出版的图书,本书定价:,页数:,特精心收集的读后感,希望对大家能有帮助。

《C和指针》读后感(一):终于有人把指针单写为一本书了

指针? 可以说是C语言的“最高级心法”部分,枯燥而不容易懂,上学的时候就觉得这一块几乎可以单独作为一本书来学习了,知道看到了这本书,终于有人把指针单写为一本书了。 本书从基础知识到高级特性,层层深入, 对于重要的C编程话题,给出了很多编程技巧和提示。书中还附带了一些针对性的习题和答案,让读者一边学习一边巩固。

《C和指针》读后感(二):读 Kenneth A. Reek 之《C 和指针》

这本书是我很久以前读过的,正好最近异步出版社送了我一本新版的《C和指针》,就来更新一下之前写的读书笔记。

之前我就提到过,虽然这本书的书名比较吓人,听起来像是什么专门深入探讨指针的高级教程,但实际上是可以当作完整的 C 教程使用的,除了指针以外的其他 C 语言特性本书也作了讨论。不过,值得注意的是,虽然这本书是 C 的完整教程,但却不是面向纯小白的。你可以不会 C 也可以没有系统学过任何一门编程语言,但是不能完全没有命令行的使用经验。虽然本书第二章对于 C 源文件的编译有所介绍,但是相对来说写得很简略。纯小白最好还是先熟悉一下命令行用法再来看这本书。

另外,这本书毕竟还是以“C和指针”为书名,指针及其背后的内存寻址机制被摆在了突出地位。对指针的介绍甚至放到了对函数的介绍之前。内存动态分配问题也专门用了一章去讲。所以,把这本书认真读一遍还是很有助于巩固对于内存机制的理解的,而内存机制,在很大程度上就是计算机运行的核心。所以表面上是在学C语言,实质上则是对计算机组成原理、编程表达和数据结构等知识的一次统合。

最后,本书的第十八章特别值得一读,这一部分讲述了通过汇编后的汇编文件分析程序硬件运行环境以及 C 和汇编的互调用。但用到这部分知识对于和硬件打交道不多的人来说应用不多。另外比较遗憾的就是这一部分没有详细说明编译指令,所以需要对编译器的参数和编译过程有比较深入的了解。

以下附上原笔记:

这本书的原名是 Pointers on C。虽然书名中强调指针,但这本书不仅仅讲指针,它其实是一本很完备的 C 语言教程。与 C Primer Plus 不同的是这本书并不面向纯新手,在阅读它之前应当有一些编程方面的基础知识。这本书在有的方面探讨得也比 C Primer Plus 深入些,例如这本书讨论了 C 编译和运行的诸多细节以及C和汇编语言的交互。此外本书的编排也更贴近知识结构本身而非初学者的学习顺序。

总得来说,这本书可以作为有一定编程基础的人系统学习 C 的教材(无需从一些特别基础的通用概念学起),也可以供读过 C Primer Plus 的人作为进阶教材使用。不过由于很多内容 C Primer Plus 和 Pointers on C 都讲到了,建议读过前者的人读后者时跳过熟悉的内容以提升阅读效率。

说到指针就不得不多说几句。指针是 C 语言的核心之一。如果没学明白指针,那么 C 语言基本就白学了。

指针,本质上是 C 对汇编中各种内存寻址方式的抽象。所以,学指针,本质是学内存的管理方式。由于计算机通过数字化管理一切,管理内存的方式自然也是给内存编号。每一个内存空间都是一个有编号的存储空间。如果这个存储空间中保存的数字是一个内存空间的编号(或者说地址),那么这个存储单元就成了一个指针变量。而代码中以常数方式给出的内存空间编号就是指针常量。这些内容都不是语言本身的内容,语言只是对内存的寻址机制做了一个抽象,抽象出一个“指针”的概念。所以只学语法,不学计算机组成和基础的硬件结构是不可能把这东西学明白的。CSAPP和《编码的奥秘》对这一部分有一些介绍,如果需要掌握更细节的内存管理的内容,就要学学汇编和硬件架构。这真是学语言得把功夫下在语言之外了。

《C和指针》读后感(三):这本经典之作真正地让人搞懂了烦人的指针。

当你掌握了C语言的基本语法、或是具备一定的编程经验后,千万不要因为“为什么循环很重要”以及“何时需要使用if语句”等肤浅问题耽误进程,不论你想要进阶的原因是钻研C语言本身、还是想要以C为基础得到更好的职业发展,以下5点都是很必要的:

一:操作符和表达式

C提供了我们希望编程语言应该拥有的所有操作符,它甚至提供了一些令人意想不到的操作符。事实上,C被许多人所诟病的一个缺点就是它有品种繁多的操作符——C的这个特点使它很难被精通。

但是,C的许多操作符具有其他语言的操作符无可抗衡的价值,这正是C适用于开发范围极广的应用程序的原因之一。C语言进阶,搞清楚操作符优先级和算术转换是重要的一课。

二:数据、结构和联合以及动态内存分配

程序对数据进行操作,数据又经常以成组的形式存在。例如,雇主必须明了每位雇员的姓名、年龄和工资。如果这些值能够存储在一起,访问起来会简单一些。但是,如果这些值的类型不同,则无法存储于同一个数组中。在C中,使用结构可以把不同类型的值存储在一起。

数组的元素存储于内存中连续的位置上。当一个数组被声明时,它所需要的内存在编译时就被分配。但是,也可以使用动态内存分配在运行时为它分配内存。那么什么时候应该使用动态内存分配?怎样进行动态内存分配?想成为一名合格的C语言程序员,这些你都了解了吗?

三:字符串、字符和字节

字符串是一种重要的数据类型,但是C语言并没有显式的字符串数据类型,因为字符串以字符串常量的形式出现或者存储于字符数组中。

字符串常量很适用于那些程序不会对它们进行修改的字符串。处理字符串和字符的库函数,以及一组既可以处理字符串也可以处理非字符串数据的相关函数是进阶C语言的一道不小的门槛。

四:预处理器

编译一个C程序涉及很多步骤。其中第一个步骤被称为预处理(preprocessing)阶段。C预处理器(preprocessor)在源代码编译之前对其进行一些文本性质的操作。

它的主要任务包括删除注释、插入被#include指令包含的文件的内容、定义和替换由#define指令定义的符号,以及确定代码的部分内容是否应该根据一些条件编译指令进行编译。

五:指针

C语言只有值的传递,无法直接传递引用,要想传递引用必须通过指针间接实现。

要搞明白指针,就要搞明白:内存和地址、值和类型、指针变量的内容、NULL指针、指针常量、指针的表达式、指针运算等等......这就是为什么指针被称为C语言进阶最大boss的原因了。

新手面对指针的常见问题

C语言的指针很重要,但新手进阶C语言时,指针相关的问题往往是最多的,这里给大家挑选了两个常见问题,看看你对这几点了解吗?

一、未初始化和非法的指针

下面这个代码段说明了一个极为常见的错误:

这个声明创建了一个名叫a的指针变量,后面那条赋值语句把12存储在a所指向的内存位置。但是究竟a指向哪里呢?

我们声明了这个变量,但从未对它进行初始化,所以没有办法预测12这个值将存储于什么地方。从这一点看,指针变量和其他变量并无区别。如果变量是静态的,它会被初始化为0;如果变量是自动的,它根本不会被初始化。无论是哪种情况,声明一个指向整型的指针都不会“创建”用于存储整型值的内存空间。

所以,如果程序执行这个赋值操作,会发生什么情况呢?

如果运气好,a的初始值会是个非法地址,这样赋值语句将会出错,从而终止程序。在UNIX系统上,这个错误被称为“段违例”(segmentation violation)或“内存错误”(memory fault)。它提示程序试图访问一个并未分配给程序的内存位置。在一台运行Windows的PC上,对未初始化或非法指针进行间接的访问操作是一般保护性异常(general protection exception)的根源之一。

对于那些要求整数必须存储于特定边界的机器而言,如果这种类型的数据在内存中的存储地址处于错误的边界上,那么对这个地址进行访问时将会产生一个错误。这种错误在UNIX系统中被称为“总线错误”(bus error)。

一种更为严重的情况是,这个指针偶尔可能包含了一个合法的地址。接下来的事很简单:位于那个位置的值被修改,虽然你并无意去修改它。像这种类型的错误非常难以捕捉,因为引发错误的代码可能与原先用于操作那个值的代码完全不相干。所以,在对指针进行间接访问之前,必须非常小心,确保它们已被初始化!

二、高级声明

在使用更高级的指针类型之前,我们必须观察它们是如何声明的。我们可以来看几个简单的例子:

它把f声明为一个函数,它的返回值是一个整数。旧式风格的声明对函数的参数并未提供任何信息。它只声明f的返回值类型。现在将使用这种旧式风格,这样例子看上去简单一些,后面再回到完整的原型形式:

确定括号的含义是分析这个声明的一个重要步骤。这个声明有两对括号,每对的含义各不相同。第2对括号是函数调用操作符,但第1对括号只起到聚组的作用。它迫使间接访问在函数调用之前进行,使f成为一个函数指针,它所指向的函数返回一个整型值。函数指针?是的,程序中的每个函数都位于内存中的某个位置,所以存在指向那个位置的指针是完全可能的。

它和前一个声明基本相同,f也是一个函数指针,只是所指向的函数的返回值是一个整型指针,必须对其进行间接访问操作才能得到一个整型值。

通过以上不难看出,指针虽然很强大,与之相伴的风险却也不小。就像指甲锉和链锯,链锯可以更快地切割木材,但链锯更容易让人受伤,而且伤害常常来得极快,后果也非常严重。

指针就像链锯一样,如果使用得当,它们可以简化算法的实现,并使其更有效率;如果使用不当,它们就会引起错误,导致细微而令人困惑的症状,并且极难发现原因。所以对指针只是略知一二便放手使用是件非常危险的事。

想要学好指针,最好的办法就是有一位导师在身后注视你的工作,时不时给你一些提示和警告。导师是谁?当然是《C和指针》。

虽然书名叫《C和指针》,但是书中的内容却讲到了C的方方面面。全书逻辑清晰,通俗易懂,在讨论C语言理论与实践的紧密融合之外,还提供了非常宝贵的提示和警告,让新手才初踏入C语言世界就免受各种陷阱的困扰。

当然,本书最大的特点就是对指针的清晰剖析,对其基础用法和高级特性都有详细介绍,告诉读者该如何有效地把指针融入自己的实际开发当中。

本文由作者上传并发布(或网友转载),绿林网仅提供信息发布平台。文章仅代表作者个人观点,未经作者许可,不可转载。
点击查看全文
相关推荐
热门推荐