C语言程序设计 刘卫国 贾宗福 沈根海 第8章 指针新.pptVIP

C语言程序设计 刘卫国 贾宗福 沈根海 第8章 指针新.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 指针 8.1 指针的概念 8.2 指针变量的定义与运算 8.3 指针与数组 8.4 指针与字符串 8.5 指针与函数 8.6 指针数组与指向指针的指针 8.7 指针与动态内存管理 8.8 指针应用举例 本章小结 8.1 指针的概念 指针是C语言的一种数据类型,指针类型变量是用于存放另一个变量地址的变量。在图8-1中,有一个字符型变量c,其值为字符A,存放在单元地址为1000的内存中,而该数据存放的地址1000又存放在内存中地址为2000的单元中。要取出变量c的值A,既可以通过使用变量c直接访问,也可以通过变量pc间接访问。 间接访问变量c的方法是:从地址为2000的内存单元中,先找到变量c在内存单元中的地址1000,再从地址为1000的单元中取出c的值A,这种对应关系如图8-1所示。 若将地址为2000的内存单元分配给变量pc,地址2000存放变量c的地址,则称pc为指针变量,指针变量(简称为指针)pc指向变量c,也称作指针变量pc所指的对象是变量c。变量c的值为字符A,指针变量pc的值为地址1000,而指针变量pc所指对象的内容为字符A。 8.2 指针变量的定义与运算 8.2.1 指针变量的定义 指针变量定义的形式为: 类型符 *指针变量名; 其中,类型符表示该指针变量能指向的对象的类型。指针变量用标识符命名,指针变量名之前的符号*,表示该变量是指针变量。指针变量也具有类型,其类型是指针变量所指对象的类型,并非指针变量自身的类型。C语言中允许指针指向任何类型的对象,包括指向另外的指针变量。 像一般的简单类型变量定义一样,指针变量定义时也可指定初值。如: int j; int *pt=j; 在定义指针变量pt时,给它初始化为变量j的地址。 在C语言中,当定义局部指针变量时,如未给它指定初值,则其值是不确定的。通过其值不确定的指针变量引用其他变量会引起意想不到的错误。程序在使用它们时,应首先给它们赋值。 为明确表示一指针变量不指向任何变量,在C语言中,约定用0值表示这种情况,记为NULL(在stdio.h文件中给出NULL的宏定义:#define NULL (0))。也称指针值为0的指针变量为空指针。对于静态的指针变量,如在定义时未给它指定初值,系统自动给它指定初值为0。 8.2.2 指针变量的运算 1.指针变量的赋值 给指针变量赋值,可以使用取地址运算符,把地址值赋给指针变量。也可以把指针变量的值直接赋给另一指针变量,此时两指针变量指向同一对象。还可以给指针变量赋NULL值。 例如: int i,*p1,*p2; p1=i; p2=p1; 定义了整型变量i和两个指向整型变量的指针变量p1和p2。第一个赋值语句将i的地址赋给p1,即p1指向i,第二个赋值语句将p1的值赋给p2,这样p1和p2均指向i,如图8-2所示。 2.指针的移动 当指针变量p指向某一连续存储区中的某个存储单元时,可以通过加减某个常量或自增自减运算来移动指针。 在对指针进行加减运算时,数字1代表一个存储单元的长度,至于一个存储单元占多少字节,要根据指针的基类型而定。在Visual C++ 6.0中,基类型为字符型的指针加1时,移动1个字节;基类型为整型的指针加1,移动4个字节;基类型为float类型的指针加1,则指针移动4个字节。一般地,在对指针进行加减整数n时,其结果不是指针值直接加或减n,而是与指针所指对象的数据类型,即指针基类型有关。指针变量的值(地址)应增加或减小n×sizeof(指针基类型)字节。 另外,指向某一连续存储区,如一个数组存储区的两个同基类型指针相减,可直接求出两指针间相距的存储单元或数组元素个数,而不用再除以sizeof(指针基类型)。显然,两指针相加没有含义。 3.指针的比较 一般情况下,当两个指针指向同一个数组时,可在关系表达式中对两个指针进行比较。指向前面的数组元素的指针变量要小于指向后面的数组元素的指针变量。例如: int *p1,*p2,a[10]; p1=a[1]; p2=a[6]; 则p1的值要小于p2的值,或者说关系表达式p1p2的值为1。 注意:如果p1和p2不指向同一数组则比较无效。 4.通过间接访问运算符 * 引用一个存储单元 假设有以下说明和语句: int i=123,*p,k; p=i; 则k=*p;和k=*i;都将把变量i中的值赋给k。 运算符 和 * 都是单目运算符,它们具有相同的优先级别,结合方向为从右至左。间接访问运算符 * 的运算对象必须出现在它的右侧,且运算对象只能是指针变量或地址。 当指针变量定义和赋值之后,引用变量的方式可以用变量名直接引用,也可以通过指向变量的指针间接引用。下面看一个例子。 【例8.1】分析程序的执行过程和变量引用方式。

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档