- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C程序设计基础讲义7.ppt
程序设计语言C 信息与计算科学教研室 GCG@STAFF.SHU.EDU.CN 第七章 指针 §1 指针概念 §2 指针变量定义 §3 指针与一维数组 §4 指针与函数 §5 指针与二维数组 §6 指针与字符串 §1 指针概念 ?内存,变量,数组,地址都与其存储地址有关. int a=10,*p=a; printf(“%x %d”,p,*p) ?地址—变量数据在内存存贮位置a ?指针—存贮地址的变量p 指针p 变量a 地址2000 地址a=2002 指针变量的内存单元中存放的是一个变量的地址 变量a的地址赋给指针变量p 指针变量p 指向变量a §1 指针概念 1.变量的指针 变量的指针指的就是该变量的首地址。 2.指针变量 指针变量是以指针(地址)为值的一种变量。 3.指针指向变量 若将变量x 的地址赋值变量p,则变量p指向变量x。 4.指针变量的类型 指针变量类型是所指向变量的类型。不同类指针不能互相赋值。 5.空指针-表示指向空、没有指向或指向结束等含义,记为NULL。NULL是一个指针常量,对应0地址,在头文件stdio.h中定义。 §2 指针变量定义 指针变量定义的一般形式: 数据类型 *指针变量名; 例:int *p; /*定义p是指向整型变量的指针变量*/ float *y; /*定义y是指向实型变量的指针变量*/ char *s; /*定义s是指向字符型变量的指针变量*/ 定义指针变量时可以对它初始化 int i; int *p = i; printf(%d%x,i,i); printf(%d%x%x,*p,p,p); ?取址运算符 :取出内存单元的地址 例:p = i; i 的地址赋给指针p, 即指针 p 指向了变量 i 。 ? 取值运算符* :取出指针所指向变量的值 例:y = *p; 指针 p 指向变量值赋给变量 y *p = x; 变量x的值赋给指针指向的变量 ? 指针定义中 int *p :定义指针 程序使用中 y=*p : 指针取值运算 ? 赋值= int a,*b,*c;b=a;b=c; (取得地址) 关系== int a[9];*p=a[i];*q=a[j]; p==q;pq; (比较地址) 算术+- ++ -- q-p; q; p++; (求解地址) 1若P=ffb6 则: 1) q=p+4*2 =ffb6+8=ffbe (H) 2) q++ =ffbe+2=ffc1 (地址+地址?) 3) q-p =(ffbe-ffb6)/2=4 4) p+4==q (p=a[2];q=a[6]) 2 若int x,y,*p=x;则: y=*p+5;? y=++*p;? /* ++*p相当于++(*p) */ y=*p++;? /* 相当于y=*p; p++ */ 例1 指针的概念 main ( ) { int x, *p; p = x; x = 20; printf(x: %d \n , x ); printf(*p: %d \n, *p); printf(x: %x \n, x); printf( p: %x \n , p ); printf(p: %x \n, p ); } 例2 分析下列程序的运行结果 main ( ) { int a = 10, b = 8, c, d, *p1, *p2; p1 = a; p2 = b; c = *p1 + *p2; d = *p1 - *p2; printf (a+b=%d \n, c ); printf (a-b=%d \n, d ); } §3 指针与一维数组 指针p指向一维数组a[]即p=a[0] int a[9],*p=a; (下列指向相同) p=a,*p=a[0]; *p(i)=*(a+i),p[i]=a[i]; 区别:数组a是常量, 不能进行增量运算。 a+i为a[i]的地址, *a就是a[0], *(a+i)就是a[i] 而指针p是变量, 可作增量运算p++。 §3 指针与一维数组 §3 指针与一维数组 下标法与指针法表示的等价性 1.数组名作为指针常量 若int a[5], *p;则数组名a表示数组首地址,p=a[0];等价于p=a; 2. 在指针中使用下标运算符 下标
原创力文档


文档评论(0)