如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
上机习题CH10EX1:输入3个整数,按从小到大顺序输出CH10EX3:输入10个数,将最小数与第一个数交换,将最大数与最后一个数交换(3函数:输入、处理、输出)CH10EX6:自编函数intstrlen(char*s),求串的长度CH10EX7:自编函数char*copy(char*s1,char*s2,intm),将串s2中从第m个字符开始的全部字符复制到s1中CH10EX17:自编函数intstrcmp(char*s1,char*s2)CH10DELC:可以使用strcpy函数设计一个函数:char*del_char(char*str,charch),删除字符串str中出现的所有某字符ch,如:删除“aabcaadea”中的所有‘a’。函数返回值为删除字符后的串,如“bcde”第10章指针2000i3010pi2000i2002j3012pj2002j2004k30142004k2006x3016pkx30183010pi可将前面右图简化为下面的逻辑关系图:piipi指向i,应理pjj解为:pi中存放i的地址,pkk通过该地址可找到变量i。pxx内存中实际并不存在真的指针变量的指针和指向变量的指针变量变量的指针就是变量的地址定义指针变量的格式:基类型*指针变量名定义指针变量的例子:inti,j,*pi,*pj;以上定义了两个普通变量i和j及两个指针变量pi和pj指针变量简称指针,用于存放普通变量的地址定义中*pi表示定义一个指针变量执行语句中出现的*pi表示由指针变量pi所指向的变量,等价于该变量指针变量所能指向的变量与定义的类型有关例1一个简单的程序voidmain(){int*p,i=3;p=&i;printf("%d,%d\n",i,*p);}指针运算符&:取地址运算符*:指针运算符*p即是p所指变量例:p=&a;将a的地址送指针变量p*p=5;将5赋给p所指的变量aprintf("%o",p);输出p的值(地址)scanf("%d",p);对p所指变量做输入printf("%d",*p);将p所指变量的值做输出例2改变指针变量p2的值p1ap1ap2bp2bvoidmain(){int*p1,*p2,a=5,b=9;p1=&a;p2=&b;printf("%d,%d\n",*p1,*p2);p2=p1;printf("%d,%d\n",*p1,*p2);}例10.2按先大后小顺序输出a、b的值p1ap1ap2bp2bvoidmain(){int*p1,*p2,*p,a,b;scanf("%d%d",&a,&b);p1=&a;p2=&b;if(*p1<*p2){p=p1;p1=p2;p2=p;}printf("%d,%d\n",*p1,*p2);}例3交换两指针所指向的变量的值p1ap1ap2bp2bvoidmain(){int*p1,*p2,a=5,b=9,t;p1=&a;p2=&b;printf("%d,%d\n",a,b);t=*p1;*p1=*p2;*p2=t;printf("%d,%d\n",a,b);}使用指针时常见错误有以下两种:1。指针未初始化例:voidmain(){inta=5,*p;/*p未知,是随机数,*/*p=6;/*若p刚好指向一有用单元,*/}/*则该单元的值会被改变*/2。误解指针的用法例:voidmain(){inta=5,*p;p=a;/*将p当普通变量*/printf("%d",*p);}上例输出结果是一个不确定的值,而不是5。p=a;是错误的,应该将一个地址而不是一个值赋给指针变量p,由于p未初始化,指向一个不确定的单元,故结果也不确定。若将p=a;改为p=&a;就没有问题指针的初始化在定义指针变量时使其指向某变量(获得某内存地址),如:inti,*p=&i;char*s="Helloworld!";/*无名数组*/动态内存分配函数(#include“alloc.h”)内存空间分配函数malloc格式:(类型*)malloc(size)向系统申请分配一块长为size字节的连续存储单元。函数返回值为该区域首址例:p=(char*)malloc(100);例4申请一片存储空间存放字符串#include"stdio.h"#include"alloc.h"voidmain(){char*p;/*未直接使用数组*/p=(char*)malloc(80);gets(p);puts(p);}例5不定长数组的实现#include“alloc.h”voidmain(){int*p,i,n