第四章 应用程序设计示例

上传人:飞*** 文档编号:5723105 上传时间:2017-08-07 格式:PPT 页数:85 大小:1.32MB
返回 下载 相关 举报
第四章 应用程序设计示例_第1页
第1页 / 共85页
第四章 应用程序设计示例_第2页
第2页 / 共85页
第四章 应用程序设计示例_第3页
第3页 / 共85页
第四章 应用程序设计示例_第4页
第4页 / 共85页
第四章 应用程序设计示例_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《第四章 应用程序设计示例》由会员分享,可在线阅读,更多相关《第四章 应用程序设计示例(85页珍藏版)》请在金锄头文库上搜索。

1、第四章应用程序设计示例,C程序设计中使用指针可以:使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存得到多于一个的函数返回值,指针的概念变量与地址,程序中: int i; float k;,内存中每个字节有一个编号-地址,i,k,编译或函数调用时为其分配内存单元,变量是对程序中数据存储空间的抽象,指针与指针变量指针:一个变量的地址指针变量:专门存放变量地址的变量叫,2000,指针,指针变量,变量的内容,变量的地址,&与*运算符含义,含义: 取变量的地址单目运算符优先级: 2结合性:自右向左,含义: 取指针所指向变量的内容单目运算符优先级: 2结合性:自右向左,两者关系:互为逆运算理解,

2、i_pointer-指针变量,它的内容是地址量*i_pointer-指针的目标变量,它的内容是数据&i_pointer-指针变量占用内存的地址,i_pointer &i &(*i_pointer)i *i_pointer *(&i),i_pointer = &i = &(*i_pointer)i = *i_pointer = *(&i),直接访问与间接访问直接访问:按变量地址存取变量值间接访问:通过存放变量地址的变量去访问变量,例 i=3; -直接访问,3,例 *i_pointer=20; -间接访问,20,例 k=i; -直接访问 k=*i_pointer; -间接访问,10,例 k=i;

3、k=*i_pointer;,指针变量指针变量与其所指向的变量之间的关系,指针变量的定义一般形式: 存储类型 数据类型 *指针名;,合法标识符,指针变量本身的存储类型,指针的目标变量的数据类型,表示定义指针变量不是*运算符(乘法),例 int *p1,*p2; float *q ; static char *name;,注意:1、int *p1, *p2; 与 int p1, p2;2、指针变量名是p1,p2 ,不是*p1,*p23、指针变量只能指向定义时所规定类型的变量4、指针变量定义后,变量值不确定,应用前必须先赋值,指针变量的初始化一般形式:存储类型 数据类型 *指针名=初始地址值;,赋给

4、指针变量,不是赋给目标变量,例 int i; int *p=&i;,变量必须已说明过类型应一致,例 int i; int *p=&i; int *q=p;,用已初始化指针变量作初值,例 main( ) int i; static int *p=&i; . (),不能用auto变量的地址去初始化static型指针,例 main( ) int i=10; int *p; *p=i; printf(“%d”,*p); ,危险!,例 main( ) int i=10,k; int *p; p=&k; *p=i; printf(“%d”,*p); ,指针变量必须先赋值,再使用,注意不同的*p,以下程序中

5、哪些语句是错误的?main() int a,*p; a=3; p=3; /*或者 p=a;*/ p=&a; *p=a; /*或者*p=3*/,讨论:程序中引用变量时,对指针变量p,不带*号引用表示?带*号引用表示?,两个特殊的运算符&变量名 取该变量的地址* 指针变量名 取该地址处存放的值,零指针与空类型指针零指针:(空指针)定义:指针变量值为零表示: int * p=0;,p指向地址为0的单元,系统保证该单元不作它用表示指针变量值没有意义,#define NULL 0int *p=NULL:,p=NULL与未对p赋值不同用途: 避免指针变量的非法引用在程序中常作为状态比较,例 int *p;

6、 . while(p!=NULL) . ,void *类型指针表示: void *p; 使用时要进行强制类型转换,例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;,表示不指定p是指向哪一种类型数据的指针变量,例 指针的概念,main() int a; int *pa=&a; a=10; printf(a:%dn,a); printf(*pa:%dn,*pa); printf(&a:%x(hex)n,&a); printf(pa:%x(hex)n,pa); printf(&pa:%x(hex)n,&pa);,运行结果:a:10*pa:10&a

7、:f86(hex)pa:f86(hex)&pa:f88(hex),例 输入两个数,并使其从大到小输出,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=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2);,运行结果:a=5,b=9 max=9,min=5,5,2006,9,2008,2006,2008,2006,指针变量作为函数参数地址传递特点:共享内存,“双向”传递,swap(int x,int y) int t

8、emp; temp=x; x=y; y=temp;main() int a,b; scanf(%d,%d,&a,&b); if(ab) swap(a,b); printf(n%d,%dn,a,b);,例 将数从大到小输出,5,9,5,5,9,COPY,指针变量作为函数参数地址传递特点:共享内存,“双向”传递,swap(int x,int y) int temp; temp=x; x=y; y=temp;main() int a,b; scanf(%d,%d,&a,&b); if(ab) swap(a,b); printf(n%d,%dn,a,b);,例 将数从大到小输出,值传递,5,9,运行结

9、果:5, 9,swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p;main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d,&a,&b); pointer_1=&a; pointer_2=&b; if(ab)swap(pointer_1,pointer_2); printf(n%d,%dn,a,b);,5,9,2000,2002,5,9,COPY,5,例 将数从大到小输出,swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p;main() i

10、nt a,b; int *pointer_1,*pointer_2; scanf(%d,%d,&a,&b); pointer_1=&a; pointer_2=&b; if(ab)swap(pointer_1,pointer_2); printf(n%d,%dn,a,b);,5,9,2000,2002,5,9,例 将数从大到小输出,运行结果:9,5,地址传递,swap(int *p1, int *p2) int *p; *p=*p1; *p1=*p2; *p2=*p;main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d,&a,&b); po

11、inter_1=&a; pointer_2=&b; if(ab) swap(pointer_1,pointer_2); printf(n%d,%dn,a,b);,运行结果:9,9,编译警告!结果不对!,int x;int *p=&x;,例 将数从大到小输出,5,9,2000,2002,9,9,COPY,假设2000,指针变量在使用前必须赋值!,/*ch9_32.c*/swap(int x,int y) int t; t=x; x=y; y=t;main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d,&a,&b); pointer_1=&a;

12、 pointer_2=&b; if(ab) swap(*pointer_1,*pointer_2); printf(n%d,%dn,a,b);,运行结果:5,9,例 将数从大到小输出,值传递,5,9,2000,2002,COPY,5,5,9,运行结果:5,9,例 将数从大到小输出,swap(int *p1, int *p2) int *p; p=p1; p1=p2; p2=p;main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d,&a,&b); pointer_1=&a; pointer_2=&b; if(ab) swap(pointer_1,pointer_2); printf(%d,%d,*pointer_1,*pointer_2);,5,9,2000,2002,COPY,2000,值传递,2000,2002,指针与数组指向数组元素的指针变量,例 int array10; int *p; p=&array0; / p=array;或 int *p=&array0;或 int *p=array;,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号