
《C专家编程》
文章平均质量分 92
戎·码一生
自信来自实力,改变来自挑战。做一只生活小强。
展开
-
《C专家编程》:C程序运行时的数据结构(六)
编程语言的经典对立之一就是代码和数据的区别。但是有些语言如LISP把两者视为一体。但是C语言却维持着两者的区别。代码和数据的区别也可以认为是编译时和运行时的分界线。编译器的绝大部分工作更翻译代码有关,必要的数据存储管理的绝大部分都在运行时进行。 学习运行时系统,主要有三个理由:(1)有助于优化代码,获得最佳效率;(2)它有助于理解更高级的材料;(3)当陷入麻烦时,它可以使分析问题原创 2016-05-28 16:59:53 · 1941 阅读 · 0 评论 -
《C专家编程》:如何检测链表里的环(附1)
题目:怎样才能检测到链表中存在环。没有任何条件限制:方案:使用标记法:将访问过的元素进行标记(通过修改链表的结构),如果遍历玩链表还没有碰见标记的元素,则说明没有环,反之则有;O(N)时间复杂度。数据位于只读存储区,不能修改:方案:空间换时间:申请一个N个元素大小的内存空间,用哈希表将所有的元素保存起来,看后面的元素有没有重复的,若有,则存在环;没有则不存在。时间复杂度为O(N),原创 2016-06-19 15:19:58 · 993 阅读 · 0 评论 -
《C专家编程》:全面回顾认识C++(十)
如果你觉得C++还不够复杂,那你知道protected abstract virtual base pur virtual private destructor inheritance是什么意思吗?你上次用到它又是什么时候呢? -----Tom Cargill,C++ Journal 1990年秋 C原创 2016-06-19 15:12:03 · 3497 阅读 · 1 评论 -
《C专家编程》:如何用气压计测量建筑物的高度(附3)
《C专家编程》,看完该书,这本书详细地介绍了C语言中的难点和易错点。本来后面的不打算写了,但是仔细想想,觉得应该善始善终,所以不论好坏,只要对自己有帮助就够了,就坚持写完!发现附录还有一个非常有趣的故事。在此也就以它结束吧,开拓一下我们眼界,更新我们的三观。 轻松一下——如何用气压计测量建筑物的高度 有一个很早的故事,讲的是一位物理系学生寻找新奇的方法用气压计测量一幢建筑物的高度。原创 2016-06-19 15:42:23 · 5004 阅读 · 0 评论 -
《C编程专家》:程序员面试(附2)
问题一:确定一个变量是有符号数还是无符号数:首先signed int类型是有符号的:如果是正数,最高位是0,如果是负数最高位是1,。对于32为的机器来说其表示的范围为:-2^31到2^31-1。但是unsigned无符号类型的整数就是所有位参与计数,所以无符号位肯定是一个正数。对于32位的机器来说其表示的范围为:0到2^32-1。判断该变量是否为有无符号的数,还不能用函数来判断,因为函原创 2016-06-19 15:28:12 · 1704 阅读 · 0 评论 -
《C专家编程》:再论指针(八)
千万不要忘了,当你把一个手指指向别人的时候,你手上的另外还有三个手指指向了你自己.... ---多疑间谍的格言 在笔记(7)里面我们也讲解了,多维数组和指针的一些知识和转换。这节内容我们将继续介绍数组与指针有关的知识。一、数组的数组和指针数组 我们知道多维数组虽然看起来其存储结构是一张表,但是其实系统是决不允许程序按这种方式进行存储数据的。其单个元素的存储与引用都是以线性形式排列在内存中。如下图一所示:原创 2016-05-31 16:32:14 · 2452 阅读 · 0 评论 -
《C专家编程》:函数如何返回一个数组(九)
这节的内容比较少也比较简单,主要是觉得用的很少,所以单独提出来加深印象。主要涉及到函数如何返回一个数组的问题。还有关于内存的分配和扩展基础知识的复习。一、如何使用指针从函数返回一个数组。 前几节,我们分析了怎么样把一个数组当参数传递给指针。本小节换个方向讨论数据的转化:从函数返回一个数组。严格的说,函数无法返回一个数组。但是可以让函数返回一个指向任何数据结构的指针,当然也可以是一原创 2016-05-31 16:47:57 · 3534 阅读 · 0 评论 -
《C专家编程》:深度剖析数组与指针(七)
数组与指针的关系颇有点像诗和词的关系:他们都是文学形式之一,有不少共同之处,但在实际的表现手法上又有各自的特色。---Peter Van Der Linden 在笔记(4)中我们讨论了数组和指针并不一致的情况(在一个文件中定义为数组,在另一个文件中声明为指针)。所以在代码中的定义和引用时一定要“配套使用”。不然可能会出现一想不到的问题。这一节,我们将继续讨论可以把指针和数组看作相同的情况,因为数组和指针可以互换的情形要比两者不可互换的情形更为常见。一、声明和使用声明可以进一步分成3中情原创 2016-05-29 21:23:09 · 1286 阅读 · 0 评论 -
《C专家编程》:语言类型的声明(三)
C语言在声明各种类型的变量,函数等的时候包含一个十分重要的东西,那就是声明器(declarator)-它是所有声明的核心。简单的说,声明器就是标识符以及与它组合在一起的任何指针、函数括号、数组下表等。有些事合法但是有些是非法的: 例如fool()(),或者foo()[]这都是非法的。 但是const int* (*p(int **p))(char *str,f原创 2016-05-22 20:54:36 · 809 阅读 · 0 评论 -
《C专家编程》:编译器的金科玉律(一)
C诡异离奇,缺陷重重,却获得了巨大的成功。 --Dennis Ritch 好记性不如烂笔头,但是作为一个计算机专业的小菜选手,用笔而不同键盘是不是有点儿对不起互联网了,怎么的也要挤进这个知识互联共享的大家庭里。最近在看基本编程相关的书籍,这本曾经读过的[美]Peter Van Der Linden著 徐波 译的《C专家编程》回头看一看,发现有很多知识点,虽然和其他文章有重复原创 2016-05-18 21:27:10 · 1218 阅读 · 0 评论 -
《C专家编程》:指针和数组的区别详解(四)
C语言编程新手常听到的说法之一就是“数组和指针是相同的”。不幸的是,这是一种非常危险的说法,并不完全正确。一、什么是声明,什么是定义。 注意下面声明的区别: extern int *x;//声明x是一个int类型的指针; extern int y[]; //第二条语句声明y是个int类型的整形数组,长度尚未确定,其存储在别处定义;原创 2016-05-24 10:21:15 · 2937 阅读 · 0 评论 -
《C专家编程》:对链接和函数库的思考(五)
当我们开始编程时,就惊奇的发现要让程序正确运转比想象的要难。我们不得不使用给调试结束。我还清楚的记得那一刻,从那时开始我就领悟到,从我自己的程序里寻找错误将成为我生活的一个重要部分。----Maurice Wikes发现Bug,1949. 一、编译器 编译器创建一个输出文件,这个文件包含了可重定向的对象。这些对象就是与源程序对应的数据和机器指令。绝大多数的编译器并不是一个单一原创 2016-05-25 18:00:00 · 1430 阅读 · 0 评论 -
《C专家编程》:最庞大的实体类型-Bug(二)
Bug是迄今为止地球上最庞大的实体类型,有近百万种已知的品种。在这方面,它比其他任何已知的生物种类的总和还要多,而且至少多出四倍。---摘自Snope教授的Encyclopedia of Animmal Life。 分析编程语言缺陷的一种方法就是把所有的缺陷归于三类: “多做之过”--不该做的做了; “少做之过”--该做的没有做;原创 2016-05-21 16:01:59 · 1193 阅读 · 0 评论