当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

长江大学:《C语言程序设计》PPT课件_第十章 指针(1/3)

资源类别:文库,文档格式:PPT,文档页数:13,文件大小:107KB,团购合买
点击下载完整版文档(PPT)

第10章第1节 第十章指针 C集高级语言和低级语言的特点于一身 计算,处理数据 应用软件 控制硬件 访问内存地址 大型应用软件、 操作系统 应用于指针 表示数据结构 §10.1指针的概念 指针 即“地址”。即某个变量在内在中的存放地址 源程序中的任何变量,在程序编译后,实质上变量是不存在的,而是在内存 中的某一区块(数据区),划出某一些单元(如:int2个Byte,foat4个Byte等) 来存放变量的数值(用二进制数表示),这些单元都有唯一的编号地址。系 统规定了变量与这些地址的对应关系(对于多字节数据,选取第一个单元的地 址—首地址)。在这些单元中存取数据,就相当于引用了对应的变量。 对应 变量 地址 变量的值 该地址对应单元 中存放的数据

第10章第1节 C集高级语言和低级语言的特点于一身 计算,处理数据 控制硬件 访问内存地址 表示数据结构 应用软件 大型应用软件、 操作系统 指针 应用于 §10.1 指针的概念 一. 指针 —— 即“地址”。即某个变量在内在中的存放地址 源程序中的任何变量,在程序编译后,实质上变量是不存在的,而是在内存 中的某一区块(数据区),划出某一些单元(如:int 2个Byte, float 4个Byte等) 来存放变量的数值(用二进制数表示),这些单元都有唯一的编号——地址。系 统规定了变量与这些地址的对应关系(对于多字节数据,选取第一个单元的地 址——首地址)。在这些单元中存取数据,就相当于引用了对应的变量。 变量 地址 一一对应 变量的值 该地址对应单元 中存放的数据

第10章第1节 二直接寻址与间接寻址 寻址根据地址来存、取某个变量对应的数据方法 1、直接寻址—根据变量与地址的对应关,用变量名直接引用数据 例: 2005 (0 系统自动分配的单元 2004 d int x, y, z; 2003 2002 y scanf(%od, %dn,"&x, &y) 2001 TXt; printf((“%d”,) 2000 从键盘输入两个整数放入地址为 2000、2001和2002、2003中 从20002001和2002、2003单元中取 出数据,送CPU相加,结果放入2004、 2005单元中 从2004、2005中取出数据,送显示 器输出

二. 直接寻址与间接寻址 第10章第1节 寻址——根据地址来存、取某个变量对应的数据方法。 1. 直接寻址——根据变量与地址的对应关,用变量名直接引用数据 例: mian() { int x,y,z; scanf(“%d,%d\n,”&x,&y); z=x+y; printf(“%d”,z); } 2005 2004 2003 2002 2001 2000 z y x 从键盘输入两个整数,放入地址为 2000、2001和2002、2003中 从2000、2001和2002、2003单元中取 出数据,送CPU相加,结果放入2004、 2005单元中 从2004、2005中取出数据,送显示 器输出 系统自动分配的单元

第10章第1节 2.间接寻址将变量x的地址放在另一地方(即放在另一个变量计中,这个 变叫“指针变量”),故要读取x的数据,需先读取i的数值(即x的地址), 然后根据x的地址值,再读取x的数据。 20002001 20022003 20042005 指向 指向 指向 5000 5100 5200 2000 2002 k 2004 mainO finex, y, z; int *i, i, * k; &x; j=&y; k&z scanf(“%od,%d”,&x,&y); 相当于 k=(*i)+(2j); printi(“%d”,k);} printi(%od”,z); jk——存放地址的变量,叫“指针变量”。又因为上述地址是变量的 地址,故称ik为“指向变量的指针变量

2. 间接寻址——将变量x的地址放在另一地方(即放在另一个变量i中,这个 变叫“指针变量”),故要读取x的数据,需先读取i的数值(即x的地址), 然后根据x的地址值,再读取x的数据。 第10章第1节 2000 2001 2002 2003 2004 2005 x y z i 2000 j 2002 k 2004 5000 5100 5200 main() {int x,y,z; int *i,*j,*k; i=&x; j=&y; k=&z; scanf(“%d,%d”,&x,&y); *k=(*i)+(*j); printf(“%d”,*k); } 相当于 z=x+y; printf(“%d”,z); i,j,k —— 存放地址的变量,叫“指针变量”。又因为上述地址是变量的 地址,故称i,j,k为“指向变量的指针变量”。 指向 指向 指向

第10章第2节 §10.2变量的指针和指向变量的指针变量 指针变量的定义 1形式 类型符半指针变量名; 与一般变量的命名相同 表示指针变量中存放的是一个整型变量的地址, 即指针变量指向整形数据。称为基类型 例:int*x; 表示定义了一个指针变量,该变量指向整形 数据。(即x中只能放整形变量的地址。) 指针变量的引用——引用指针变量通常需借助两个专用的运算符 址运 L运算符,指什运算(间接访运算,职根地址值访 问变量。(*一后面跟指针变量)

§10.2 变量的指针和指向变量的指针变量 第10章第2节 一. 指针变量的定义 1.形式 类型符 *指针变量名; 与一般变量的命名相同 表示指针变量中存放的是一个整型变量的地址, 即指针变量指向整形数据。称为基类型 例: int *x; ——表示定义了一个指针变量,该变量指向整形 数据。(即x中只能放整形变量的地址。) 二. 指针变量的引用——引用指针变量通常需借助两个专用的运算符 1. 运算符 &——取地址运算符。 (&——后面跟变量名) *——指针运算符(间接访问运算符)。即:根据地址值访 问变量。(*—— 后面跟指针变量)

第10章第2节 mainO Rint x, y, z; int * i, "j,*k; 定义指针变量i,j,k i=&x;j=&y;k=&z; 将变量的地址赋给指针变量,则: scanf(“%od,%d”,&x,&y); i→x,j→y,k→z k=(*)+(j); 指根地址,取数据参加运算,即z=x+y; printf(“%d”,k); 即: printf((“%d”,z) 2.说明 *&的优先级相同,右结合,互为逆运算 例:如有: int x,y; int *1, j; i=&x; j=&y; &*i→&(i)→&x &x→(&x) x十十 +→1+(指钟变量的值发生变化

&*i &(*i) &x i *&x *(&x) *i x main() {int x,y,z; int *i,*j,*k; i=&x; j=&y;k=&z; scanf(“%d,%d”,&x,&y); *k=(*i)+(*j); printf(“%d”,*k); } 定义指针变量i,j,k 将变量的地址赋给指针变量,则: i→x,j→y,k→z 指根地址,取数据参加运算,即z=x+y; 2. 说明 * & 的优先级相同, 右结合,互为逆运算 例: int x,y; int *i,*j; i=&x; j=&y; a) b) (*i)++ x++ *i++ *(i++) *i x i=i+1(指针变量的值发生变化) 即: printf(“%d”,z); 第10章第2节 如有:

第10章第2节 例102输入两个数据按大→小顺序输出a、b 法一、用变量,直接交换变量的值 mainO fint a, b, t: scanf(“%d,%d”,&a,&b); if(a<b) t=a; a=b; b=t; printf(“a,b=%d,%dlmn”,;a2b);} 法二。用指针,不交换变量值,交换指针变量的值 maino &a int a, b, pl, *p2, * p; scan(“%d,%d”,&a,&b); pI=&a; p2=&b &b 2 if(a<b) (p=pl;pl=p2: p2=p &b printf(“a,b=%d,%dn”,a,b) 输出a,b=1,2 &a printf("max, min=%d, %d\n, *p1, *p2 输出mx,min=2,1

第10章第2节 例10.2 输入两个数据, 按大→小顺序输出a 、b 法一. 用变量,直接交换变量的值 main() {int a,b,t; scanf(“%d,%d”,&a,&b); if(a<b) {t=a;a=b;b=t;} printf(“a,b=%d,%d\n”,a,b); } 法二. 用指针,不交换变量值,交换指针变量的值 main() {int a,b,*p1,*p2,*p; scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if(a<b) {p=p1;p1=p2;p2=p;} printf(“a,b=%d,%d\n”,a,b) printf(“max,min=%d,%d\n”,*p1,*p2) } &a &b 1 2 p1 p2 b a &b &a 1 2 p1 p2 b a 输出a,b=1,2 输出max,min=2,1

第10章第2节 法三.用指针,指针变量的值不变,变量值交换 main 0 fint a, b, pl, p2, t; &a scanf(“%d,%d”,&a2,&b) pl=&a; p2=&b; 2 b if(a<b) &b tt* pl; pl=*p2; * p2=t; & 2 printf(“a,b=%d,%dln”,a,b) 2 b 输出a,b=2,1 &b printf(“n maxmIn=yo 70dn” pl, "p2) 输出 max, min=2,1 可理解为 tt*pl; *pI=*p2;*p2=t; -ta; a=b; b=t; 1 1→*&a→a

法三 . 用指针,指针变量的值不变,变量值交换 main() {int a,b,*p1,*p2,t; scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if(a<b) {t=*p1;*p1=*p2;*p2=t;} printf(“a,b=%d,%d\n”,a,b) printf(“max,min=%d,%d\n”,*p1,*p2) } &a &b 1 2 p1 p2 b a &a &b 2 1 p1 p2 b a 输出a,b=2,1 输出max,min=2,1 {t=*p1; *p1=*p2; *p2=t;} 可理解为: *p1 →* &a→a {t=a; a=b; b=t;} 第10章第2节

第10章第2节 三.用指针变量作函数的参数 形参用指针变量 传递“地址”值 实参用指针变量或变量的地址 例:输入两个数,求最大值 int max(int *pl, int *p2) fint z; if(*p1>米p2 T*pI else z*p2: return(z; 1 main fint a, b s int *i. i i=&a;j=&b; scanf(“%od,%d”),&a2<b); printf((“max=%dn”,max(j); 亡→或:ma&.b)

三. 用指针变量作函数的参数 形参——用指针变量 实参——用指针变量或变量的地址 例:输入两个数,求最大值 int max( int *p1, int *p2 ) {int z; if(*p1>*p2) z=*p1; else z=*p2; return(z); } main() { int a,b; int *i,*j; i=&a; j=&b; scanf(“%d,%d”,&a,&b); printf(“max=%d\n”, max(i,j)); } 第10章第2节 或:max(&a,&b) 传递“地址”值

利用指针变量作函数参数,返回多个值 第10章第2节 例:用调用函数求两个数的和、差 I main (0 fint a, b, add, sub; int cul(int * pl, int*p2, int*k) int*i1,*i2,*i3; {*k=(pl)+(p2); i=&a: i2=&b: 13=&add: return(pl)-p2)) scanf(“%od,%d”,&a2&b); mul=cul(i1, 12, 13); printf((“add,sub=%d,%dⅦn”,add,sub);} &a &a &a 22 传立 计算 参&b &b 数 k=(“pl)+(p2); &b &add 13 13 &add add &add &add add 5+2 &add &add

* *利用指针变量作函数参数,返回多个值 例:用调用函数求两个数的和、差。 int cul(int *p1, int *p2, int *k) { *k=(*p1)+(*p2); return((*p1)-(*p2)); } main() {int a,b,add,sub; int *i1, *i2, *i3; i1=&a; i2=&b; i3=&add; scanf(“%d,%d”,&a,&b); mul=cul(i1,i2,i3); printf(“add, sub=%d, %d\n”, add,sub); } 第10章第2节 &a &b &add i2 i3 i1 &a &b &b &add &add &a i1 p1 i2 p2 i3 k 5 a 2 b add &add &add i3 k 5+2 add 5+2 add &add i3 传 参 数 计算: *k=(*p1)+(*p2);

第10章第2节 小结:通过函数调用,得到多个返回值(或得到多个要改变的值) 步骤 1).主调函数中,定义n个变量,定义n个指针; 2).用指针作实数—→形参指针 3)用形参指针,改变变量的值;(*p=…)重要! 4).主调函数中可引这些变量。 例:输入两个数据,按大→小顺序输出a、b。用函数调用实现 void swap(int pl, int*p2 maine f int p; Rint a, b, *1, j; p=p1; i=&a;j=&b; pl=p2; scanf(“%d,%d”,ij); *p2=py f(a<b) swap(i,j); print(“%d,%dn”,a,b);

***小结: 通过函数调用,得到多个返回值(或得到多个要改变的值) 步骤: 1). 主调函数中,定义n个变量,定义n个指针; 2). 用指针作实数 形参指针; 3). 用形参指针,改变变量的值;(*p=.....) 4). 主调函数中可引这些变量。 例: 输入两个数据, 按大→小顺序输出a 、b。用函数调用实现 void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } 重要! main() {int a,b,*i,*j; i=&a; j=&b; scanf(“%d,%d”,i,j); if(a<b) swap(i,j); printf(“%d,%d\n”,a,b); } 第10章第2节

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共13页,试读已结束,阅读完整版请下载
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有