深入探索 C/C++ 数组与指针的奥秘之前言
此文是笔者 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 与指针》的书,看完后再回来继续思考你的问题。
原文链接:http://blog.csdn.net/supermegaboy/archive/2009/11/23/4855036.aspx。
分享到:
相关推荐
数组与指针的艺术 数组与指针的艺术
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多 程序设计者就被搞糊涂了。而许多的大学老师,他们在C 语言的教学过程中也错误得给学生讲解:“数组名就是...
C++数组与指针深入剖析C++数组与指针深入剖析C++数组与指针深入剖析C++数组与指针深入剖析
C/C++之数组与指针的艺术 指针是C/C++的灵魂!它是C/C++众多引人入胜的特性中的一朵奇葩。与底层操作的亲密接触是指针与生俱来的优点,利用指针可以写出许多短小精悍、效率极高的代码。它是C/C++一把无可替代的利器...
C++数组与指针对象数组对象指针C++数组与指针对象数组对象指针
详细讲解了指针,指针数组,数组指针,指针的指针等的应用。
C++数组与指针全面介绍,指针的重要性不言而喻,很多程序员怕指针,越是怕用,越要去用!
C/C++ 数组和指针及引用的区别 1.数组和指针的区别 (1)定义 数组是一个符号,不是变量,因而没有自己对应的存储空间。但是,指针是一个变量,里面存储的内容是另外一个变量的地址,因为是变量所以指针有自己的...
主要介绍了C/C++ 避免数组越界的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
C++之 数组 与 指针 的 异同 pdf
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大 学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是...
1 数组及其简单应用 2 指针及其简单应用 3 指针与数组 4 字符串 5 指针数组与命令行参数 6 引用
弄清C++指针数组关系的好文档,实用! 配有示例! 欢迎下载!
C/C++数组名与指针区别深层探索 C/C++程序员应聘常见面试题深入剖析(1) C/C++程序员应聘常见面试题深入剖析(2) 一道著名外企面试题的抽丝剥茧 C/C++结构体的一个高级特性――指定成员的位数 C/C++中的近指令、远...
动态数组类模板Array C++ //数组类模板声明 template class Array { public: Array(int sz = 50); Array(const Array<T> &A); ~Array(void); Array<T>& operator = (const Array<T> &rhs;); //重载=,使数组...
C++指针 数组 内存释放 相关说明
C++习题 6数组与指针.doc (填空 选择 解答)