前 言

此文是笔者2005年所作《再再论指针》的修订版,与前文相比,本文主要的不同点有如下几点:

一、引用C/C++标准的条款去阐述原理。C与C++标准共有四个已发行的正式版本,分别是C89/C90、C99、C++98和C++2003,为了避免重复的条款引用,在文字或语义相同的情况下,笔者只引用C99的条款,遇到不同的情况时再分别引用。

二、加入了C++的内容。

三、增加或者合并了一些章节,同时修正了一些行文错误。

指针是C/C++的灵魂!它是C/C++众多引人入胜的特性中的一朵奇葩。与底层操作的亲密接触是指针与生俱来的优点,利用指针可以写出许多短小精悍、效率极高的代码。它是C/C++一把无可替代的利器,凭着这把利器,C/C++与其它高级语言相比至少在效率方面胜人一筹。

但是,由于数组与指针的原理与使用方式跟人们通常的思维习惯有较大差别,需要花较多的时间进行消化,这使得对数组与指针的偏见和误解成为了普遍存在的现象,更出现了避免使用指针的思潮,笔者认为这是非常不可取的。指针是如此犀利,正是它才使得C/C++语言威猛无比。如果就这样把它放弃了,那么C/C++就算是白学了。我们应当让指针成为你手中那把砍掉索伦手指上魔戒的举世无双的纳西尔圣剑,而不是你心中永远的魔戒。

与众多初学者一样,笔者对数组与指针的理解也经历了漫长的过程。初学C的时候,笔者作为谭书的受害者之一,与其它初学者一样脑袋中充满了对数组与指针各种各样的误解。后来随着对C/C++理解的深入,逐渐发现谭书中存在大量的谬误与漏洞,从此开始了纠偏的历程。这是一段痛并快乐着的过程,痛是由于愤恨被谋杀了一段宝贵的时光,快乐是因为重新找到了方向,相信不少朋友也曾有过跟笔者相似的体会。在这段时间里,笔者查阅了大量的资料,也耗费了大量的时间进行深刻的思考,还跟同事、朋友、网友进行了大量的辩论,特别是2005年,几乎整整一年的时间都是在激烈的辩论中渡过的,当年这些辩论的激烈程度到现在还记忆犹新,如果当时手里有把枪的话,我想我会开枪的!经过不断的思考、辩论、印证,再思考、再辩论、再印证,数组与指针的迷雾终于逐渐清晰了起来。

本文的目的,是希望通过跟各位朋友一起讨论关于数组与指针的几个关键概念及常见问题,加深对数组与指针的理解。笔者不敢奢望能够完全解开你心中的魔结,但如果通过阅读本文,能够让你在日后的数组与指针使用过程中减少失误,笔者就心满意足了。

当你阅读本文后:

如果你有不同的意见,欢迎你在评论里留下自己的见解,笔者很乐意跟你一起讨论,共同进步。

如果你觉得我说的全都是废话,那么恭喜你,你的指针已经毕业了。

如果你有太多不明白的地方,那么我介绍你先找一些关于数组与指针的读物看看,笔者推荐你阅读一本叫《C与指针》的书,看完后再回来继续思考你的问题。

时间: 2024-10-05 16:45:22

前 言的相关文章

boost.asio源码剖析(一) ---- 前 言

* 前言 源码之前,了无秘密.                                                       ——侯捷 Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一.Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容.在C++社区中影响甚大,是不折不扣的“准”标准库. boost.asio是Boost库中非常著名的I/O组件,是用于网络和低层IO编程的跨平台C++库,为开发

售前之道 之方案型售前

前 言 所谓方案型售前,是指以解决方案和投标文件写作为主的售前.该类售前的特点是写作量巨大,需要较强的资料收集能力和写作能力作为支撑才能完成好的工作.下面就如何收集资料以及写作和如何写好方案和商务投标做一个阐述. 如何收集资料 收集资料是售前的基本功,因为售前在写作能力解决方案和制定表书的时候,往往领导交待下来的任务及一点点资料,但从领导那里获取的资料往往不能满足庞大的写作需求,所以售前必须学习和具备收资料的能力和建立自己的资料数据库database,这样一来,才能在方案上.标书上.才能得心应手

[ ObjectListView ] - ListView的增强控件 - 前言 (翻译)

********************************************************************************** 原  标 题: A Much Easier to Use ListView 原文地址: https://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView 翻       译: 于国栋 http://www.shannon.net.cn *********

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

SharePoint Online 创建门户网站系列之图片滚动

?? 前 言 创建SharePoint Online栏目我们之前已经介绍过了,具体就是内容编辑器方式.自带WebPart方式和JavaScript读取后台数据前台做展示的三种: 但是,对于复杂的展示来说,这些方式还是会比较难以实现,虽然对于首页的图片轮播来说,通过JavaScript方式已经完全能够胜任,但是,我还是想通过这个栏目,为大家介绍如何使用沙盒解决方案创建WebPart,来完成更加复杂的前台展示. 下面,让我们开始在SharePoint Online的门户网站中创建沙盒解决方案吧 .

JQuery实用技巧--学会你也是大神(1)——插件的制作技巧

  前  言 JRedu 学习之前,首先我们需要知道什么是JQuery? JQuery是一个优秀的javascript框架. JQuery是继Prototype之后又一个优秀的Javascript框架.其宗旨是--WRITE LESS,DO MORE,写更少的代码,做更多的事情.它是轻量级的js库,这是其它的js库所不及的,它兼容CSS3,还兼容各种常用浏览器. JQuery是一个快速的,简洁的JavaScript库,使用户能更方便地处理HTML documents.events.实现动画效果,

学习mysql语法--基础篇(二)

  前  言  mysql  mysql语法--本篇学习都是通过使用Navicat Premium(数据库管理工具),连接mysql数据. 本篇学习主要有两个部分: [SQL语句的组成]   DML 数据操作语言(插入.删除和修改数据库中的数据)INSERT UPDATE DELETE   DQL 数据查询语言(用来查询数据库中的数据)SELECT   DCL 数据控制语言(用来控制存取许可.存取权限等)CREATE   DDL 数据定义语言(用来建立数据库.数据库对象和定义表的列)CREATE

学习mysql语法--基础篇(一)

  前  言  mysql  mysql语法--本篇学习都是通过使用Navicat Premium(数据库管理工具),连接mysql数据. 本篇学习主要有两个部分:    一.创建用户,创建数据库,给用户分配权限,删除用户权限.    二.MYSQL中常见的数据类型 三.表-创建表.主键.外键    四.数据库设计的三大范式 以下所有代码全部在新建查询表里面使用mysql语法编辑. 1.创建用户,创建数据库,给用户分配权限,删除用户权限. /* SQL 多行注释 */-- SQL 单行注释 创建

Php面向对象基础(1)

前 言   这是我来到博客园大家庭所写的第一篇个人博客,以后我也将在这里记录自己所学的点点滴滴.深知还有5个月不到的时间就要面临找工作的窘境,但我还是想坚持有时间了就来写点东西.尽管在写这段前言的时候,我感觉我可以在看点其他的知识,但我还是想坚持下去,坚信会有不一样的收货.在这里引用今早读的一篇文章的话来激励一起走在IT路上你和我,至于为何需要一些激励,也许以前你有有过,也许未来你会有这样的迷茫:Where should I go? and why shuold I go here? 至少现在的