前言 数组与指针的艺术
此文是笔者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与指针》的书,看完后再回来继续思考你的问题。
发表于 @ 2009年11月23日 11:05:00 | 评论( 1 ) | 编辑| 举报
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/supermegaboy/archive/2009/11/23/4855036.aspx
前言 数组与指针的艺术相关推荐
- 数组与指针的艺术--深入探索c/c++数组与指针的奥秘
不显示删除回复显示所有回复显示星级回复显示得分回复 [推荐] 数组与指针的艺术--深入探索c/c++数组与指针的奥秘[问题点数:200分] supermegaboy (飞天御剑流) 等 级: 结帖率: ...
- 第一章:数组与指针概念剖析
第一章 数组与指针概念剖析 收藏 数组与指针生来就是双胞胎,多数人就是从数组的学习开始指针的旅程的.在学习的过程中,很自然就会经常听到或见到关于数组与指针的各种各样的看法,下面我节选一些在各种论坛和文 ...
- C++数组与指针的区别
数组与指针的区别 前言 修改内容上的差别 运算符sizeof 可以计算出数组的容量(字节数) sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p所指的内存容量 计算数组和指针的内存容量 ...
- C/C++:Windows编程—Windows RPC 传递自定义数据类型、自定义数据类型数组、指针数组
前言 该篇博文不是讲Windows rpc入门的.是笔者在实际使用Windows RPC时 所遇到的问题,以及解决方法. 笔者有这样的需求,需要从RPC Server获取大量数据,而且该数据是动态分配 ...
- 小白来学C语言之数组与指针
前言:写东西一样要保存,ctrl s常按着,写了一晚上,第二天全没了,快要哭了.要不是自己在指针这里浪费了很多时间,我可能就不会重新写了,希望大家能看懂学会,别再走弯路了. 1.内存四区 . a) 代 ...
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- 【C++】数组和指针的爱恨情仇。。。
前言 最近研究C++中的数组怎么作为参数传入到函数中,自然而然引出了这篇博客的标题,即数组和指针的爱恨情仇... 1 数组和指针都是啥? 想要知道数组和指针交织在一起会摩擦出怎样的火花,那就先 ...
- C语言数组与指针、数组的定义方式
文章目录 前言 一.数组与指针的关系 二.C中的指针 如何定义指针呢? 三.如何用指针表示数组: 如何用指针表示数组呢? 总结 前言 楼主大一的时候学过一点C语言,但是之后一直没有用,最近用到了发现有 ...
- C语言数组之指针数组和数组指针
目录 前言 1.指针数组 1.1.指针数组的定义 1.2.指针数组详解 2.数组指针 2.1.数组指针的定义 2.2.数组指针详解 3.二维数组与数组指针 4.数组名和数组名取地址的区别 4.数组指针 ...
最新文章
- 院士:科研工作者也得养家,非升即走压力下,不得不做短平快的研究
- SQL Server 2008 R2占用内存越来越大解决方法
- 技术文章精美配图模板网站推荐-创客贴
- 张家口zec挖矿软件哪里下载_AMTO软件下载-AMTO挖矿官网版v1.1
- 韦东山和正点原子IMX6ULL开发版的区别
- 字定义JSON序列化支持datetime格式序列化
- java获取屏幕上某坐标点的颜色
- rk3399_secureboot在linux环境中操作说明
- shell脚本之安装ansible(centos7环境)
- mysql提权马免杀_webshell/牛逼免杀提权隐藏大马 (1).asp at master · tennc/webshell · GitHub...
- php 高并发接口,接口高并发解决方案
- 1. 软件开发流程与QA工作流程
- win10系统解决Svn图标不显示的问题
- 从零实现一个3D目标检测算法(1):3D目标检测概述
- android格式化sd卡软件,如何在各种设备中把SD卡格式化?附误格式化数据恢复方法!...
- discuz怎么自定义php,Discuz添加自定义数据调用模块
- 什么是MAC多播地址
- VC中三种常见中文内码的转换方法
- 惠普电脑锁屏快捷键怎么设置?
- 计算机基础知识(基础入门小白专属)十
热门文章
- 解读Cardinality Estimation算法(第一部分:基本概念)
- Spring Security实现登录权限控制,记住我等功能
- java.lang.ClassNotFoundException: org.springframework.web.servlet.Dispatcher
- (SpringMVC)数据处理及跳转
- Shiro在SpringBoot中的应用
- netty web 容器_Netty - 高性能网络应用框架常见面试题
- 在 Linux 命令行上编辑照片的 4 种方法
- 教你如何在 Linux 上为 SSH 登录设置电子邮件提醒
- 【实验】配置802.1x远端认证
- 阿里云开源业内首个应用多活项目 AppActive,与社区共建云原生容灾标准