c语言程序设计第六章 指针

上传人:飞*** 文档编号:48594270 上传时间:2018-07-17 格式:PPT 页数:69 大小:395.50KB
返回 下载 相关 举报
c语言程序设计第六章 指针_第1页
第1页 / 共69页
c语言程序设计第六章 指针_第2页
第2页 / 共69页
c语言程序设计第六章 指针_第3页
第3页 / 共69页
c语言程序设计第六章 指针_第4页
第4页 / 共69页
c语言程序设计第六章 指针_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《c语言程序设计第六章 指针》由会员分享,可在线阅读,更多相关《c语言程序设计第六章 指针(69页珍藏版)》请在金锄头文库上搜索。

1、第六章 指针6.1 指针的概念 6.2 指针变量的定义和引用 6.3 指针与数组 6.4 指针与函数 6.5 多级指针6.1 指针的概念q指针是C语言的重要特色,正确的 应用指针,可以:v使程序简洁、紧凑、高效;v有效地表达复杂的数据结构;v动态分配内存,直接处理物理内 存地址;v得到多于一个的函数返回值。变量与地址q变量是对程序中数据存储空间的抽象q变量的地址是其存储单元的首字节地 址程序中: short i;float k; .2000 2001 20022005内存 02003编译或函数调用 时为变量分配内 存单元ki指针与指针变量q指针:变量的地址 q指针变量:专门用来存放变量地址的变

2、 量.20002004 2005变量 i10变量i_pointer2001 2002 2003变量i的内 容指向变量i的 指针变量变量i 的地 址 (指针)i_pointer 的内容是 i 的地址2000-直接访问.2000200420062005i 10i_pointer20012002200320003例 *i_pointer=20; -间接访问206.2 指针变量的定义和引用q指针变量的定义q指针变量的初始化q指针变量的引用q指针运算指针变量的定义q定义形式:类型说明符 * 指针变量名;q例: int *ip, i; /* 定义ip为整型指针变量,i为整型变量 */ char * nam

3、e; /* 定义name为char型指针变量*/ float *fp1; /* 定义fp1为float型指针变量*/指针的目标变 量的数据类型表示定义指 针变量合法标 识符指针变量的初始化q一般形式: 数据类型 *指针变量名=初始地址值 ;例: int i, *p=float *p1= int *p2=p;int *p3=100; static *p4= 可以用已初始化的指 针变量作初值不能用auto变量的地址 去初始化static型指针指针变量与目标变量 的数据类型应一致不能用非地址型数据 为指针变量赋值空指针与野指针q空指针:其值为0(用NULL表示)的 指针。如: int *p=0; 或

4、 int *p=NULL;q野指针:未初始化的指针,其值不确 定。q空指针不指向任何目标,野指针指向 不确定的目标。q比较:int i; int *p1= /*p1指向变量i*/float *p2; /*p2的指向不确定*/char *p3=NULL; /*p3不指向任何目标*/指针变量的引用q通过引用指针变量,可以间接访问目 标变量。修改指针,则访问目标也改 变。 q例:int i, j;int *p;i=0; j=i; /* 直接访问i , j */p = /* p指向i */*p = 100; /* 间接访问i */p = /* p指向j */*p = 200; /* 间接访问j */结

5、果:i=100j=200指针变量应用举例 例6-1 #include void main() int var; int *p; var = 10; p = /*必须先对p 赋值,才能引用*/printf(“printf(“var=%d, *p=%dn“, var, *p); *p=100; printf(“var=%d,*p=%dn“, var, *p); 注意:引用空指针和野 指针是严重的运行错误 !指针应用举例例6-2:输入两个数,按由大到小的顺序输出 。 void main() int *p1, *p2, *p, a, b;scanf(“%d,%d“, p1=p2=if(a * +,-

6、如:x=*p+; x=*p; p=p+1;x=*+p; p=p+1; x=*p;x=(*p)+; x=*p; *p=*p+1;q指针相减运算:设p1和p2指向同一数 组中的不同元素,则 p1-p2为两个指针 之间的数组元素个数。如:int a10;int *p=int *p1= int *p2= 则:p2-p1的值为3a0 a1 a2 a3 a4 a5 a6 a7 a8 a9a数组pp1 p2 指针的关系运算q若p1和p2指向同一数组,则:vp1p2 表示p1指的元素在后vp1=p2 表示p1与p2指向同一元素vp1!=p2 表示p1与p2指向不同元素 q若p1与p2不指向同一数组,比较无意

7、义 q单个指针可与空指针值比较:p=NULL 或 p!=NULL指针的赋值运算q只能用同类型的地址常量或变量对指针 赋值。q常用赋值方法举例: double d, a5, *p, *p1, *p2; p1= /*将变量d的地址赋值p1 */ p2=p1; /*将指针p1复制给指针p2 */ p=a; /*将数组a的首地址赋给 p*/ p= /*将数组元素a3的地址赋给p */指针运算举例q例6-3:输入一个整数,统计其数据位数(不 包括符号位)并对不正确的字符进行判断。 #include void main( ) char *p, number100=“; int flag=0, count=

8、0; p=number; printf(“Please input a number: “); scanf(“%s”, number); /*检查第一个字符,若不是+ - 09 则错*/ if(*p)=-|(*p)=+) flag=1; /* 有符号 */ else if(*p)9) flag=2; /* 输入错 */*从第二个字符开始,检查输入的字符串*/p+;while(*p /*不是09则错*/p+;if(flag=2) /*输入有误*/printf(“input error!n“);else if(flag=0) /*无符号位*/count=p-number;else count=p-

9、number-1; /*有符号位,减1*/ printf(“count of numbers :%dn“,count); 6.3 指针与数组q数组名是表示数组首地址的地址常量a int *ip;ip=a; ip= q引用指针,访问数组元素 例:*(ip+5)=10; *(a+5)=10; a5=10; q移动指针,访问数组元素,执行效率高 例: *(+ip)=10; *(ip+1)=10;/指针是否发生变化 *(+a)=10; / 错误,a是指针常量,不可修改数组元素表示方法int a10, *p=a; 则:ai pi *(p+i) *(a+i)pp+9p+1 p+2*p *(p+1) *(p

10、+2)*(p+9 )2 7 4 68.a p=a; /*使用前先赋值 */for(i=0; i void main( ) char *p=“I am a student.“; int i; printf(“%sn“, p);for(i=0; pi!=0; i+) printf (“%c“, pi);printf(“n“);p+=5; /*p向后移动5个数据单位*/ printf(“%sn“, p ); 输出: I am a student.I am a student.a student.pi=*(p+i) p未移动指针数组q指针数组:由同类型的指针变量为元素 构成的数组。q定义:类型说明符

11、*数组名常量表达式例如:float *p_num10;定义了一个由10个指向float型变量的指 针构成的数组。q指针数组的初始化char *name5=“Li“,“Liu“,“Chen“;例:用指针数组表达多个字符串char *name5=“Li“,“Liu“,“Chen“;name0name1name2name3name4char *name5LNULLNULLi0L i0unC h0e指针数组应用举例q指针数组常用于处理二维数组或多个字 符串 q例:利用指针数组显示菜单。 #include void main() char *menu5=“1 input“,“2 copy“,“3 mov

12、e“,“4 delete“,“5 exit“;int i;for(i=0; i void constr_a(char str1, char str2, char str3) int i=0, j=0; while(str1i!=0) str3i=str1i; i+; while(str2j!=0) str3i+j=str2j;j+; str3i+j=0; 例:合并两个字符串void constr_p(char *str1, char *str2, char *str3) while(*str1) *str3+ = *str1+; while(*str2) *str3+ = *str2+; *s

13、tr3=0; void main() char s1=“Happy“; char s2=“ New Year!“; char s320; constr_a(s1,s2,s3); puts(s3); constr_p(s1,s2,s3); puts(s3);输出:Happy New Year!Happy New Year!函数的返回值为指针 q函数的返回值可以是int型、float型、 char型,也可以是一个指针类型。q定义格式:函数类型 *函数名(形参表)例:int *func() int *p;return(p);函数func返回一个指向整型数据的指针。例:显示菜单项内容#include

14、/*定义菜单为全局字符指针数组menu*/ char *menu5=“1 input“,“2 copy“,“3 move“,“4 delete“,“5 exit“ ;/*根据菜单号返回菜单项字符串,为指针数组元素 */ char * menu_item(int i) if (i4) return NULL; else return (menui); void main() char * item;int i, number;for(i=0; i /*被积函数*/ float f1(float x) return (1+x*x); float f2( float x) return(1+x+x*x+x*x*x); float f3( float x) return(x/(1+(x*x); /*通用积分函数。形参fun、a、b分别表示 */ /*定积分的函数名和积分上下限。 */ float integral(float (*fun)(float),float a,float b) float s, h, y;int n, i;s=(*fun)(a)+(*fun)(b)/2.0;/*调用fun所指向

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

当前位置:首页 > 行业资料 > 其它行业文档

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