C语言---第九章-指针.pptVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C 程序设计 第九章 指针 9.1 指针的概念 在计算机的内存区域中,每个字节给以一个唯一的编号,叫“地址”。那么 int i; int k; 分配20002和20003给变量i 分配20004和20005给变量k 则把20002叫变量i的地址,20004叫变量k的地址。 变量的指针就是变量的地址。 取变量的地址用操作符 。如上例中 i 为 20002 k 为 20004 可以通过变量名来访问该变量,也可以通过变量的地址来访问该变量。 同样可以把变量的地址存放在另一个变量中,通过该变量间接地访问变量。 9.2 指向变量的指针变量 用于存放变量的地址的变量叫指针变量。 把存放变量的地址的指针变量,称做指向该变量的指针变量。 指针变量的定义:指针变量必须定义成指针类型。例如: int i,k; int *ip,*kp; 则 ip 和 kp为指针变量。可以用来存储变量的指针: ip=i; kp=k; ip指向i,kp指向k。 定义指针变量的一般形式: 类型 *标识符,…… 注意: 指针变量必须加上“*”,表示定义的是指针变量,如*ip和*kp。但其变量名为ip和kp。 指针变量有类型,必须定义成欲指向的变量的类型。如 char *cp; 则cp必须指向字符型,不能指向整形、浮点型等。 指针变量只能用于存放地址。 和一般变量一样,未初始化的指针变量,其值是一个随机值。 指针变量的引用: —取地址运算 *—指针运算符 指针变量只能存放地址,不能存放非地址类型的数据。例如: 说明: 如果“ap=a;” *ap *ap相当于变量 a ,故它相当于a *a a相当于ap,*ap相当于a,故它相当于a (*ap)+ + 相当于a+ +。而*ap+ +因+ +和指针运算符同级,且求解过程“自右到左”,因此相当于 *(ap+ +) 例如: main(){ int *p1,*p2,*p,a,b; scanf(“%d%d”,a,b); p1=a;p2=b; if(ab){p=p1;p1=p2;p2=p;} printf(“a=%d,b=%d\n”,a,b); printf(“max=%d,min=%d\n”,*p1,*p2); } 指针变量作为函数的参数 swap(p1,p2) (例9.3) int *p1,*p2; { int p; p=*p1;*p1=*p2;*p2=p; } main(){ int a,b; int *ap,*bp; scanf(“%d%d”,a,b); ap=a;bp=b; if(ab) swap(ap,bp); printf(“\n%d,%d\n”,a,b); } 9.3 数组指针和指向数组的指针变量 一个数组有若干个元素,数组中的所有元素占有一定的内存单元、且在内存中顺序排列着。 数组名代表该数组在内存中的起始位置。该起始位置的地址值就是该数组的指针。 p=a[0]; p=a; 在定义指针变量时可以用已经定义的数组变量对它进行初始化。 int a[10]; int *p=a; 或者 int *p=a[0]; 它相当于: int *p; p=a; 或者:int *p; p=a[0]; 注意:如下写法是错误的。 int *p; *p=a; /* 或者 *p=a[0]; */ 一、通过指针引用数组 int a[10],*p; p=a; p+1 指向a[1] a+1 指向a[1] p+i 指向a[i] 因此: *(p+i)就是a[i] 也可以写成:p[i] 例如: *(p+3)就是a[3] 由此可见,引用数组的方法有: 下标法:a[i]、p[i],例如 a[3]=9 p[4]=8等等 指针法:*(p+i),*(a+i) 例如 输出数组全部元素。 ①下标: main(){int a[10],i; for(i=0;i10;i++) scnaf(“%d”,a[i]); for(i=0;i10;i++) printf(“%d “,a[i]); } 通过数组名计算元素的地址,引用数组元素。 main(){int a[10],i; for(i=0;i10;i++) scanf(“%d”,a[i]); for(i=0;i10;i++) printf(“%d ”,*(a+i)); } 用指针引用数组元素。 main(){int a[10],*p; p=a; for(i=0;i10;i++) scanf(“%d”,a[i]); for(i=0;i10;i++) printf(“%d “

文档评论(0)

岁月如歌777 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档