原帖及讨论:http://bbs.bccn.net/thread-211258-1-1.html
声明:moonwalker 作于2008年4月26日 转载请注明出处
指针对一部分初学者来说一直是一个无法逾越的障碍,没有指针的C语言就好像没有左腿的短跑运动员。今天我来试试换一种方法来理解指针,希望能帮还在为指针挣扎的朋友们理清思路,高手略过即可。
我们先认为内存是一家客栈(看起来这和老掉牙的大楼的比喻没什么区别,但是请你耐心看下去)。
同大部分的客栈一样,这家客栈有天、地、人等各种档次的房间,用现在的话就是单人间、双人间、四人间等等。来住店的客人也是车水马龙,三教九流都有,我们看看都有哪些人:
快乐单身汉char,还有char的小弟unsigned char,他们只住单人间;
short int, unsigned short int都是已婚无孩,他们只住二人间;
int, unsigned int, long int, unsigned long int,这些都是四口之家,当然住四人间了;说起来这里面的前两位,int和 unsigned char,在dos时代还是二人世界,住二人间,后来出了32位系统后,他们才成为四口之家,等到了64位时代,他们中有人会变成8口之家。人口变化太快,所以人口问题就不讨论了,只要知道有几口人(几个字节)就住几人间就行了。
另外还有一些更庞大的家庭double,float我们就不一一赘述了。
住客栈是要登记的,至少老板要知道哪个房间没人住,好租给新来的客人吧?于是就把每位客人的房间号都记在了纸上,然后把纸卷在了针上,大大节省了空间,这就是纸针(指针*)啦,^_^。为了安全,登记完的指针也放在客房里了,不过是没有人住的房间。
为了区分不同身份的客人(本客栈不搞歧视,区分身份只是为了便于管理),客栈用颜色不同的纸来记录房间号,这就有了不同类型的指针,比如蓝色的char*这种指针只记录单人间的房间号,红色的int*只记录四人间的。看起来分这么多种类很混乱,但是如果有很多同类型的组团(数组)来住店时就方便了,上次int a[100]来旅游的时候,就找到那一沓100张红色的指针就可以知道谁住哪里了。比如团长a[0]的房间号记在第一张纸p上,那么翻开下一页(p++)你就找到了隔壁的房间号,你拿前四张去找人正好可以凑一桌麻将了。
虽然指针分为很多颜色(类型),但是不管多大的家族都只住一间屋子,只有一个房间号,所以无论什么颜色的指针都具有相同的大小,长度就是房间号那么长。
并非所有人都像int a[100]那么幸运,他们来的时候正好一层100个房间都没人住,于是他们可以住在同一片连续的区域。上次m, n, p, q, r一起来想住连续的几个屋子,方便一起去玩,偏偏找不到合适的房间,只好m住3楼,n住5楼,…,总之都很远。可是m老是来问老板他的朋友们住哪里?老板每次要找半天,后来想了个办法,把记录这几个人的指针用一个盒子*p[5](指针数组)放在一起,这样就方便多了。
有的客人脾气很怪,比如char F[4],他们四个是一个乐队的,可是又不愿住四人间,非要一人住一间,还一定是连着的,如果不连着就不住,老板没办法,给他们找了连着的四间房。可是大牌还真是难缠,他们早上出去工作就退房,晚上又要回来住,老板又要给他们找连续的四间房,天天如此,而且每次都浪费四个指针,客栈的成本一下提高了。老板又想了个办法,他专门为这些人订做了另一种颜色的指针(*p)[4](指向数组的指针),他用这个指针记录他们老大F[0]的房间号,剩下的三位房间号就是紧挨着的三间,减少了不少浪费。
一直忘了介绍客栈的两个伙计,一个叫“小&”,另一个叫”小*”,看外形就知道,”小*”比较圆滑,肯定是经常可客人,而“小&”肚子比较大,一看就是常年打算盘,记帐不活动造成的。有时候有人来客栈找住店的人,首先要查找客人的房间,“小&”就是负责去取保存房间号的指针的,比如上面提到的m想找r去逛街,“小&”就去找r的指针了(&r), “小&”找了半天,终于找到了r的指针p(p = &r),他把p交给”小*”, ”小*”就拿着p去叫客人了(*p就是r了)。看起来好像”小*”的工作比“小&”轻松,其实”小*”也不容易,他要区分指针的颜色(类型)来决定叫多少个人,比如拿的是蓝色的指针(上面说得是char型),就只叫一个客人就可以,如果是红色的(int)就得叫4位客人,如果少叫了一位楼下找人得客人会生气得,因为没有把要找的人找全。
好了,这家客栈介绍完了,为了感谢你看到这里,现在客栈经营权就交给你了,希望你财源广进
分享到:
相关推荐
一個關於C语言——数组与指针的基本教程,簡單而實用
"C语言——小熊时钟" 本文将对C语言的小熊时钟程序进行详细的解释和分析,包括程序的结构、图形界面、时间显示和交互功能等方面。 一、程序结构 小熊时钟程序的结构主要包括以下几个部分: 1.头文件包含:程序...
"彻底搞定C语言指针" C语言指针是C语言中一个非常重要的概念,但它却是初学者最容易迷惑和混淆的部分。要真正搞定C语言指针,需要深入理解C语言变量的存储实质和内存空间的概念。 1. 变量的存储实质 内存空间可以...
在C语言中,指针是编程中的一个关键概念,它允许我们间接访问和修改内存中的数据。本主题探讨的是如何利用指针来实现数组元素的逆序操作,这是C语言程序设计中常见的任务之一,特别是在处理数据结构和算法时。下面...
在这个打字游戏中,我们主要是通过C语言的编程技巧来实现游戏的开发,例如使用宏定义、使用数组、使用指针等。在游戏的优化技巧方面,我们主要是通过游戏的缓存、游戏的循环优化等来实现的。 五、游戏的扩展性 ...
第2篇是C语言技术进阶,包括数组、指针、函数、结构型、共用型、枚举型和用户自定义类型;第3篇是C语言高级应用,包括算法、预编译命令、文件和图形,以及预处理命令等内容;第4篇是C语言开发案例,详细讲解了C语言...
"趣味编程C语言——C语言经典示例代码"这个资源旨在通过一系列实例来帮助初学者和有经验的开发者深入理解C语言的核心概念。下面,我们将详细探讨其中可能涉及的知识点。 1. **基础语法**:C语言的基础包括变量声明...
2. **指针**:C语言中的指针是其强大功能的关键。指针能够存储内存地址,允许直接操作内存,从而实现高效的数据处理和复杂的数据结构。 3. **数组与字符串**:数组是C语言中存储固定数量相同类型元素的集合,字符串...
### C语言指针导学——指针进阶读物 #### 指针的重要性与挑战 C语言作为一门强大的编程语言,其核心特性之一便是指针。指针因其灵活性和效率成为了C语言不可或缺的一部分,同时也因其复杂性成为了很多初学者难以...
《C语言实验报告——指针》 实验报告的焦点在于深入理解C语言中的核心概念——指针,通过一系列编程实践来提升对指针的运用能力。指针是C语言的灵魂,它提供了对内存直接操作的能力,是高效编程的关键工具。 一、...
在这个“数据结构C语言——宿舍管理”的课程设计中,学生将学习如何应用数据结构的知识来解决实际问题,即创建一个宿舍管理系统。这个系统可能包括对宿舍信息、住宿学生信息以及宿舍分配的管理。 首先,我们要理解...
【标题】"C语言——学习笔记"涉及到的是基础的编程知识,主要集中在C语言这一编程语言上。C语言是计算机科学中的基石,以其简洁、高效和可移植性著称,被广泛应用于系统开发、嵌入式系统、软件工程等多个领域。 在...
《51 C语言——单片机原理课件》是一份专为初学者设计的教育资源,旨在帮助新手快速理解和掌握51系列单片机的基本概念、结构及编程技术。51单片机是微控制器领域中非常经典的一款产品,广泛应用于各种嵌入式系统中。...
标题“C语言——链表的归并_c语言链表详解”和描述“用c语言写链表归并”明确指出了本文的主要内容:使用C语言实现链表的归并操作,并对C语言中的链表进行详细讲解。 #### 代码解析 ##### 1. 结构体定义 ```c ...
### 由浅入深学C语言——基础、进阶与必做430题 #### 知识点概览 1. **C语言基础** - C语言的起源与发展 - C语言的特点与优势 - C语言的应用领域 2. **C语言开发环境搭建** - 对硬件系统的基本要求 - 对软件...
《二十一天学通C语言——手把手教你学编程》是一本专为初学者设计的C语言教程,旨在通过系统的学习和实践,使读者在短时间内掌握C语言的基础与核心概念。C语言是一种强大的、通用的、面向过程的编程语言,被广泛应用...
在本项目中,"C语言——彩票管理系统" 是一个基于C语言实现的彩票销售与管理的应用程序。这个系统设计的目的是为了模拟实际彩票销售过程中的各种功能,包括彩票的购买、开奖、兑奖等环节,同时也可能包含了对彩票...
《C语言——学生宿舍系统》是一个使用C语言编写的管理软件,主要目的是为了方便管理和查询学生宿舍的相关信息。本文档将详细介绍该系统的核心结构、功能和实现方式。 首先,系统定义了一个名为`Student`的结构体,...