第8节 指针.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 指针 考核知识点 指针与指针变量的概念,指针与地址运算符 变量、数组、字符串、函数的指针及指向变量、数组、字符串、函数的指针变量。通过指针引用以上各类型数据。 用指针作为函数参数 指针数组、指向指针的指针 重要考点提示 对指针概念的理解 指针作为函数的参数 字符类型指针的操作 对指针的理解 8.1关于地址和指针 要想搞清楚地址和指针的概念,首先要清楚变量在内存中的存储方式及变量是如何被存取的。 我们知道,在程序中定义的某个变量,在编译时系统会给这个变量相应地分配与该变量类型相匹配的内存单元。即按照程序中所定义的变量的类型,分配与该变量类型所占相同长度的空间。在内存中每一个字节都有一个编号,这个编号就是“地址”,它相当于每个变量的房间号。变量的数据就存放在地址所标识的内存单元中,变量中的数据其实就相当于仓库中各个房间存放的货物。如果内存中没有对字节进行编号,系统将无法对内存进行管理。内存的存储空间是连续的,因此内存中的地址号也是连续的,并且用二进制数表示,为了直观起见,这里我们用二进制进行描述。 一向微机使用的C系统为整型变量分配2个字节,为实型变量分配4个字节,为字符型变量分配1个字节,为双精度类型变量分配8个字节。当某一变量被定义后,其内存中的地址也就确定了。例如: int x,y; float z; x y z 2012 2013 2015 2016 2201 2202 2203 2204 图8-1 x,y,z的存储单元分配 这时,系统为x和y分配两个字节存储单元,为z分配了4个字节的存储单元,如图8-1所示,图中的数字只是表示字节的地址。每个变量的地址是指该变量所占存储单元的第一字节的地址。在这里,我们称x的地址为2012,y的地址为2015,z的地址为2201。 在一般情况下,我们在程序中只需定义变量并指出变量名,无须去知道每个变量在内存中具体地址,由C编译系统来完成每个变量与其具体地址发生联系的操作。在程序中我们对变量进行存取操作,实际上也就是对某个变量的地址存储单元进行操作。这种直接按变量的地址存取变量的方式称为“直接存取”方式。 在C语言中,还可以用另一种称为“间接存取”的方式来完成对变量进行存取的操作,即将变量的地址存放在另一种类型的变量中,从而通过这种新的变量类型来得到变量的值。按C语言规定,可以在程序中定义整型变量、实型变量、字符型变量等,也可以通过定义这样一种特殊的变量,它是专门用来存放地址的。假设我们定义了一个变量p,用来存放整型变量i的地址,它的地址被分配为1010字节,可以通过下面语句将i的地址(1500)存放到p变量中: p=i; 这时,p的值就是1500,即变量p所占用单元的起始地址。要存取变量i的值,也可以用间接的方式,先找到存放“i的地址”的变量p,从中取出i的地址(1500),然后到1500、1501字节取出i的值。 由于通过地址能找到所需的变量单元,我们就可以说:地址“指向”该变量单元。所谓“指向”就是通过地址来体现。在C语言中,将地址形象地称为“指针”,意思是通过它能找到以它为地址的内存单元,这里包含有一个方向指向的意思。一个变量的地址称为变量的“指针”。一个专门用来存放另一个变量的地址的变量(即指针),则称它为“指针变量”。 8.2变量的指针和指向变量的指针变量 1.指针变量的定义 定义指针变量的一般形式如下: 类型名 *指针变量名1,*指针变量名2,...;如int *p,*i; 以上定义语句中,p和t都是合法用户标识符,在每个变量前的星号(*)是一个类型说明符,用来标识该变量是指针变量。 提示: 变量前的星号不可省略若省略了星号说明符,就变成 了把p和t定义为整型变量(int是类型名)。在这里,说明了p和t是两个指向类型(int 类型)变量的指针,也就是说变量p和t中只能存放int类型变量的地址,这时我们称int是指针变量p和t的基类型。基类型用来指定该指针变量可以指向的变量的类型。 为什么指针变量要用“基类型”呢?一个指针变量中存放的是一个存储单元的地址值。这里“一个存储单元”中的“一”所代表的字节数是不同的:对整型而言,它代表两个字节,对实型而言,它就代表4个字节,这就是基类型不同的含义。在以后涉及到指针的移动,也就是要对地址进行增差事运算这时指针移动的最小单位是一个存储单元,而不是一个字节。因此,对于基类型不同的指针变量,其内容(地址值)增1、减1所“跨越”的字节数是不同的。故指针变量必须区分基类型,基类型不同的指针变量不能混合使用。 2.指针变量的引用 指针变量中只能存放地址(指针),将一个整型变量(或任何其他非地址类型的数据)赋给一个指针变量是不允许的。如: int *p;/*定义一个指向整型变量的指针*/ p=300;

文档评论(0)

187****5045 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档