全面详解C语言指针.pdf

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
全面详解C语言指针.pdf

C语言指针导学 前言 有人说,C语言成也指针败也指针,我觉得不无道理。指针确实是 C语言的精髓,它快捷,高效,被 广泛的应用着,而正是它的灵活,也导致它变得相对复杂,它曾一度被指像 goto 语句一样难用,但指针 有时是 C语言中表达计算的唯一方法,而且相较其他方法指针通常可以产生更高效、更紧凑的代码,所以 正确地,规范地使用指针,是每个 C语言使用者必修的功课。想要做到这一点,首先在概念上要清晰,我 会在后面的文章中把每个概念详细地介绍给大家。 现在来说一下写此文的目的:最主要的还是与朋友及前辈们相互学习、讨论。如果您是有着多年开发 经验的达人,那么您无需驻足,如果您能赏光看看我的文章,很希望您能指出我的错误观点以及纰漏之处, 以免我误人子弟,并且促使我更加深入地研究和实践,便于我更快地进步。当然如果您是刚刚接触程序设 计的朋友,对于标识符、变量、循环、数组都还不曾熟悉,那么我写的内容可能会让你感到迷茫,当然我 会尽力阐述得易于理解。能从我写的东西中有些收获的应该是那些已经有一些 C语言基础但尚未涉及指针 或者涉及不深以及对指针有兴趣并想要深入研究的朋友(或同学)。对于前一种朋友希望你们看过之后能 对指针有一个比较全面的认识从而为以后的深入学习铺好路,而后一种朋友(其中有不少我的同学),希 望我写的文章能使你们对概念更加清晰,从而更准确、更安全地去使用指针。 另外说明一下,我本人也还有很多知识或者一些领域的技术不了解,不甚解,我很希望能和朋友们, 同学们以及CSDN 中的前辈达人们好好探讨,学习。 还有一点,由于对外国著作的翻译,有些术语在国内的各种教材书籍中称呼不统一,这就会使有些朋 友在参考资料时产生疑惑。我会在后面的文章中做出解释,并给出标准的英文原词和一些国内常用的翻译 法,从而使大家不至于因为一个不同的翻译方式浪费时间,最重要的是,大家要弄懂一个概念是什么,而 不是叫什么。对于同学们来说,记住英文术语十分必要,因为我们最终都要离开学校走进职场,关注一下 这些业界常用的英文术语(仅是一个个零散的单词)花费不了你许多时间,但这会为你在今后带来或多或 少显式隐式的各种好处! 一.指针到底是什么 指针(pointer)到底是什么,弄清楚这个问题很重要,这是我们所讨论的话题的源头,而在阐述指 针是什么之前,我们需要先来看一下变量的概念。 我们知道,计算机的内存(primary storage)被划分为多个存储单元,这些存储单元可以以单个 或者顺序相连组成一个更大单元的方式被使用。每一个单独的存储单元都是一个字节(byte),它通常由 8个位(bit)组成,每一个位可以表示的值只有0或 1。每一个存储单元都被一个及其分配的标识唯一地 表示,而这个标识就是地址。 下图表示了存储单元单独被操作时的情形,矩形表示存储单元,矩形内的内容是存储在这个内存单元 的具体的值。矩形上方的数就是每个内存单元的地址。因为每个单元为一个字节,而每个字符型常量 (character constant)所占据的正是一个字节,如下所示: 再来看下面的图: 这次的情况是顺序连成组进行操作,对于整型常量(integer constant),在32位计算机中需要四个 字节来存储(有一点要声明,208位置的那个矩形里的 1078345超出了 int类型的范围,是 long int 类型,但 ANSI C 只规定了 long型数据长度不小于 int型,int型数据长度不小于 short型,并规定 int型为 16位,long型为32位,然而很多编译器采取的策略是使 long和 int型数据占据相同的内存 字节数,即全为 32位),所以地址以4个单位增长(也就是说现在的一个矩形表示4个内存单元),这次 矩形下面多了几个小写字母,存储在矩形里面的值不是固定唯一的,而是可变的。我们可以把矩形认为是 一个变量(variable),每次我们要引用矩形里的值时,机器都是通过地址来定位(那个矩形)并取得其 中的值的,而对于我们来说要记住这些地址几乎是不可能的,所以高级语言提供了用名字来访问内存位置 的特性,它们就是变量名,即上图的a,b,c,d。 现在用变量名替换掉上图中的地址: 大家要注意,变量名与地址的关联是由编译器为我们实现的,具体的实现方式我们无需关心,但要清楚硬 件仍然是通过地址访问内存位置的。 (变量名是给编译器看的,编译器根据变量是局部还是全局分配内存地址或栈空间,所谓的变量名在内存 中不存在,操作时转换成

文档评论(0)

tangtianbao1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档