C语言教案8-指针.ppt_第1页
C语言教案8-指针.ppt_第2页
C语言教案8-指针.ppt_第3页
C语言教案8-指针.ppt_第4页
C语言教案8-指针.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计,第8章指针,地址和指针,在计算机中,内存是用来存储程序和数据的部件。为了便于存储,通常把内存划分成许多个存储单元,并且对存储单元进行编号,存储单元的编号称为地址。地址通常以字节为单位进行编址。在C语言中地址是指数据在内存中存放的起始位置,如:变量(整型、浮点型、字符型、数组元素)的地址用i是一个整型变量,ptr是一个指向整型变量的指针ptr=int*pa,*pb,*pc;pa=,指针作为函数参数比较下面的例子,#includevoidexchange(intx,inty)inttemp;temp=x;x=y;y=temp;voidmain()inta=5,b=8;exchange(a,b);printf(a=%dtb=%d,a,b);运行结果:a=5b=8,#includevoidexchange(int*x,int*y)inttemp;temp=*x;*x=*y;*y=temp;voidmain()inta=5,b=8;exchange(运行结果:a=8b=5,指针与数组,在C语言中,数组名是指针常量,它代表的是数组的首地址,也是数组第一个元素的地址。设有:intdata10;则:data=main()staticinta7=-1,9,7,3,-100,0,8;clrscr();printf(minvalue=%d,min(a,7);intmin(int*p,intn)inti,minv;minv=*p;for(i=1;i*(p+i)minv=*(p+i);returnminv;,数组名做为实参,传递数组的首地址(地址常量),指针变量做为形参,接收数组的首地址,例:以数组和数组元素形式处理指针,#include#includeintmin(int*p,intn);main()staticinta7=-1,9,7,3,-100,0,8;clrscr();printf(minvalue=%d,min(a,7);intmin(intp,intn)*p改为p,用下标法表示指针对象inti,minv;minv=p0;*p改为p0for(i=1;ipi)minv=pi;*(p+i)改为pireturnminv;pi表示当前指针后第i个对象,P形式上像数组,实际上按指针方式处理,例:再探数组和指针,#include#includevoidmain()inta7=-1,9,7,3,-100,0,8;inti,*p;clrscr();p=a;for(i=0;i7;i+)printf(%dt,ai);printf(n);for(i=0;i7;i+)printf(%dt,pi);,两次运行结果相同,指针的运算,指针运算例:,#includevoidmain()inta8=-1,9,7,3,-100,0,8,5;floatb8=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8;int*pa,*pa1;float*pb;pa=a;pb=b;printf(%u:%dtt%u:%3.1fn,pa,*pa,pb,*pb);pa+;pb+;printf(%u:%dtt%u:%3.1fn,pa,*pa,pb,*pb);pa+=3;pb+=3;printf(%u:%dtt%u:%3.1fn,pa,*pa,pb,*pb);pa+2;pb+2;printf(%u:%dtt%u:%3.1fn,pa,*pa,pb,*pb);printf(%u:%dtt%u:%3.1fn,pa+2,*pa+2,pb+2,*pb+2);printf(%u:%dtt%u:%3.1fn,pa,*(pa+2),pb,*(pb+2);pa=,字符指针,字符指针指向字符串或字符型数组。例:#includevoidmain()chara=IamaTeacher.;char*ptr1=a,*ptr2=“YouareStudents.”;ptr1指向字符型数组a,ptr2指向字符串printf(“%c%c%c%cn”,*ptr1,*(ptr1+2),*(ptr1+5),*(ptr1+7);显示:IaaTprintf(“%c%c%cn”,*ptr2,*(ptr2+4),*(ptr2+8);显示:YaSprintf(“%sn”,“SheisaStudent.”);对应%s的是字符串常量printf(“%sn”,a);对应%s的是字符型数组首地址printf(“%sn”,ptr2);对应%s的是字符指针变量,字符数组和字符指针处理字符串的区别,字符数组由若干个元素组成,每个元素存放一个字符,若用来处理字符串,必须保证有串结束符0。而字符指针变量用来存放字符串的首地址,不是用来存放整个字符串内容的。赋值或初始化方式不完全相同chardata20=“Thisisastring”;chardata20;data=“Thisisastring”;没有意义char*ptr=“Thisisastring”;char*ptr;ptr=“Thisisastring”;等效,字符数组和字符指针处理字符串的区别,在说明一个字符数组后,其地址是确定的,有一个连续的区域用来存储数组的内容;而说明一个字符指针变量时,仅仅分配一个存储单元存放地址值,如果未赋值,它指向的对象是不确定的。chardata20;scanf(“%s”,data);char*ptr;scanf(“%s”,ptr);错误,ptr未初始化,不知道往那存,字符数组和字符指针处理字符串的区别,字符指针变量的值可以改变,数组的首地址却不能改变。main()char*ptr=“CLanguage”;ptr+=2;printf(“%s”,ptr);main()charstr=“CLanguage”;str+=2;printf(“%s”,str);错误,数组地址不能改变应改成printf(“%s”,str2);,指针数组,由指针变量组成的数组,其说明格式为:*;例:int*p3;分别说明了3个指针*p0、*p1、*p2,指向3个整型变量或整型数组。例:int(*p)3;说明了1个指针*p,指向有3个元素的一维整型数组。,指向指针的指针,inti,*p,*t;p=i是整型变量;p是指向整型变量i的指针;t是指向指针p的指针。,指向函数的指针,指向函数的指针就是指向函数的首地址,又称函数的入口地址。对于指向函数的指针而言,取内容表示执行由函数指针变量所指的函数。用户定义函数的函数名即是函数的首地址。指向函数的指针说明如下:(*)();(*)(参数列表);,例:8-14,#includeintmin(intm,intn)if(my)?x:y;intmin(intx,inty)return(xy)?x:y;intadd(intx,inty)return(x+y);voidgeneral(intx,inty,int(*fun)(int,int)intresult;result=(*fun)(x,y);printf(%dn,result);,voidmain()inta,b;printf(Enteraandb:);scanf(%d%d,字符串的输入输出方法,字符串的输出方法:使用printf(“%s”,string)使用printf(“%c”,stringI)使用puts(string)字符串的输入方法:使用charstring=“Iamsorry”使用scanf(“%s”,string)以空格键、Tab键、和回车键作为结束使用gets(string)仅以回车键作为结束,字符串处理函数,字符串库函数,函数原型在string.h中。1读取字符串函数gets(字符数组)2输出字符串函数puts(字符数组)3字符串拷贝函

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论