C_chapter6.2

上传人:无*** 文档编号:244846359 上传时间:2024-10-06 格式:PPT 页数:37 大小:598KB
返回 下载 相关 举报
C_chapter6.2_第1页
第1页 / 共37页
C_chapter6.2_第2页
第2页 / 共37页
C_chapter6.2_第3页
第3页 / 共37页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,复习,指针的概念,Variable and address,指针与指针变量,&(,取地址运算符,),与*,(,指针运算符,),直接访问与间接访问,指针变量,定义方式:,存储类型,数据类型 *指针变量名,初始化 (必须先赋值再使用),作为函数参数(地址传递),6.3,指针与数组,(array),指向数组元素的指针变量,例,int,array10;,int,*p;,p=,/,p=array;,或,int,*p=,或,int,*p=array;,array0,array1,array2,array3,array9,.,整型指针,p,&array0,p,数组名,是表示数组,首地址,的,地址常量,指针的运算,指针变量的赋值运算,(assignment operation),p=(,将变量,a,地址,p),p=array;(,将数组,array,首地址,p),p=(,将数组元素地址,p),p1=p2;(,指针变量,p2,值,p1),不能把一个整数,p,也不能把,p,的值整型变量,如,int,i,*p;,p=1000;(,),i=p;(,),指针的算术运算:,p,i p id,(i,为整型数,,d,为,p,指向的变量所占字节数),p+,p-,p+i,p-i,p+=i,p-=i,等,若,p1,与,p2,指向同一数组,,p1-p2=,两指针间元素个数,(p1-p2)/d,p1+p2,无意义,例,p,指向,float,数,则,p+1,p+1 4,例,p,指向,int,型数组,且,p=,则,p+1,指向,a1,例,int,a10;,int,*p=,p+;,*p=1;,例,int,a10;,int,*p1=,int,*p2=,则:,p2-p1=3;,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a,数组,p,p+1,a+1,p+i,a+i,p+9,a+9,1,指针变量的关系运算,若,p1,和,p2,指向同一数组,则,p1p2,表示,p1,指的元素在后,p1=p2,表示,p1,与,p2,指向同一元素,若,p1,与,p2,不指向同一数组,比较无意义,p=NULL,或,p!=NULL,数组元素表示方法,a0,a1,a2,a3,a9,.,a,a+9,a+1,a+2,地址,元素,下标法,a0,a1,a2,a9,a0,a1,a2,a3,a9,.,p,p+9,p+1,p+2,地址,元素,指针法,*,p,*(,p+1),*(,p+2),*(,p+9),变址运算符,a,i,*(a+i),ai,pi,*(p+i),*(a+i),*,a,*(,a+1),*(,a+2),*(,a+9),p0,p1,p2,p9,a0,a1,a2,a3,a4,例 数组元素的引用方法,main(),int,a5,*pa,i;,for(i=0;i5;i+),ai=i+1;,pa=a;,for(i=0;i5;i+),printf,(*(pa+%d):%dn,i,*(pa+i),);,for(i=0;i5;i+),printf,(*(a+%d):%dn,i,*(a+i),);,for(i=0;i5;i+),printf(pa%d:%dn,i,pai,);,for(i=0;i5;i+),printf(a%d:%dn,i,ai,);,1,2,3,4,5,pa,例,int,a=1,2,3,4,5,6,7,8,9,10,*p=a,i;,数组元素地址的正确表示:(,A,),&(a+1),(,B,),a+,(,C,),&p,(,D,),&pi,数组名是,地址常量,p+,p-(,),a+,a-(,),a+1,*(a+2)(,),例,void main(),int,a=5,8,7,6,2,7,3;,int,y,*p=&a1,;,y=(*-p)+;,printf(“%d,”,y);,printf(“%d”,a0);,输出:5 6,p,p,5,8,7,6,2,7,3,0,1,2,3,4,5,6,a,例 注意指针变量的运算,6,main(),int,i,*p,a7;,p=a;,for(i=0;i7;i+),scanf(%d,p,+,);,printf(n,);,for(i=0;i7;i+,p+),printf(%d,*p,);,例,注意指针的当前值,p=a;,p,p,5,8,7,6,2,7,3,0,1,2,3,4,5,6,a,p,p,p,p,p,p,指针变量可以指到,数组后,的内存单元,数组名作函数参数,数组名作函数参数,是,地址传递,数组名作函数参数,实参与形参的对应关系,实参,形参,数组名,指针变量,数组名,指针变量,数组名,数组名,指针变量,指针变量,例 将数组,a,中的,n,个整数按相反顺序存放,实参与形参均用数组,void,inv(int,x,int,n),int,t,i,j,m=(n-1)/2;,for(i=0;i=m;i+),j=n-1-i;,t=xi;xi=xj;xj=t;,main(),int,i,a10=3,7,9,11,0,6,7,5,4,2;,inv(a,10);,printf(The,array has been reverted:n);,for(i=0;i10;i+),printf(%d,ai,);,printf(n,);,例 将数组,a,中的,n,个整数按相反顺序存放,void,inv(int,*x,int,n),int,t,*p,*i,*j,m=(n-1)/2;,i=x;j=x+n-1;p=x+m;,for(;i=p;i+,j-),t=*i;*i=*j;*j=t;,main(),int,i,a10=3,7,9,11,0,6,7,5,4,2;,inv(a,10);,printf(The,array has been reverted:n);,for(i=0;i10;i+),printf(%d,ai,);,printf(n,);,实参用数组,形参用指针变量,例 将数组,a,中的,n,个整数按相反顺序存放,void,inv(int,*x,int,n),int,t,*i,*j,*p,m=(n-1)/2;,i=x;j=x+n-1;p=x+m;,for(;i=p;i+,j-),t=*i;*i=*j;*j=t;,main(),int,i,a10,*p=a,;,for(i=0;i10;i+,p+),scanf(%d,p,);,p=a;,inv(p,10);,printf(The,array has been reverted:n);,for(p=a;pa+10;p+),printf(%d,*p,);,实参与形参均用指针变量,例 将数组,a,中的,n,个整数按相反顺序存放,void,inv(int,x,int,n),int,t,i,j,m=(n-1)/2;,for(i=0;i=m;i+),j=n-1-i;,t=xi;xi=xj;xj=t;,main(),int,i,a10,*p=a;,for(i=0;i10;i+,p+),scanf(%d,p,);,p=a;,inv(p,10);,printf(The,array has been reverted:n);,for(p=,arr;p,arr+10;p+),printf(%d,*p);,实参用指针变量,形参用数组,一级指针变量与一维数组的关系,int,*p,与,int,q10,数组名是指针(地址),常量,p=q;p+i,是,qi,的地址,数组元素的表示方法:,下标法,和,指针法,,即若,p=q,则,pi,qi,*(p+i),*(q+i),形参数组,实质上是,指针变量,,即,int,q,int,*q,在定义指针变量(不是形参)时,,不能,把,int,*p,写成,int,p;,系统只给,p,分配能保存一个指针值的内存区(一般2字节);而给,q,分配2*10字节的内存区,6.4,指针与字符串,字符串表示形式,用字符数组实现,例,main(),char string=“I love China!”;,printf(“%sn”,string,);,printf(“%sn”,string+7,);,I,l,o,v,e,C,h,i,string0,string1,string2,string3,string4,string5,string6,string7,string8,string9,string,string10,string11,string12,string13,n,!,a,0,I love China!,China!,用字符指针实现,例,main(),char *string=“I love China!”;,printf(“%sn”,string,);,string+=7;,while(*string),putchar(string0);,string+;,I,l,o,v,e,C,h,i,string,n,!,a,0,字符指针,初始化,:把字符串,首地址,赋给,string,char *string;,string=“I love China!”;,string,*string!=0,字符串指针作函数参数,例 用函数调用实现字符串复制,(,1,)用字符数组作参数,(,2,)用字符指针变量作参数,a,I,a,m,a,t,e,a,c,e,h,0,r,.,from,a,b,y,u,a,r,a,s,u,t,n,d,e,to,b,o,e,t,.,0,I,a,a,e,c,e,h,0,r,.,t,.,0,m,t,a,void copy_string(char from,char to),int,i=0;,while(fromi!=0),toi=fromi;,i+;,toi=0;,main(),char a=I am a teacher.;,char b=You are a student.;,printf(string_a,=%sn string_b=%sn,a,b);,copy_string(a,b);,printf(nstring_a,=%,snstring_b,=%sn,a,b);,void copy_string(char*from,char *to),for(;*from!=0;from+,to+),*to=*from;,*to=0;,main(),char*a=I am a teacher.;,char*b=You are a student.;,printf(string_a,=%,snstring_b,=%sn,a,b);,copy_string(a,b);,printf(nstring_a,=%,snstring_b,=%sn,a,b);,#include,#include,main(),char str1=”Hello!,str2=”How are you?”,str20;,int,len1,len2,len3;,len1=strlen(str1);len2=strlen(str2);,if(strcmp(str1,str2)0),strcpy(str,str1);strcat(str,str2);,else if(strcmp(str1,str2)y)z=x;,else z=y;,return(z);,main(),int,max(int,int,),(*p)();,int,a,b,c;,p=max;,scanf(%d,%d,&a,&b,);,c=,(*p),(a,b);,printf(a,=%d,b=%d,max=%dn,a,b,c);,int,max(int,x,int,y),int,z;,if(xy)z=x;,else z=y;,return(z);,用函数指针变量作函数参数,例 用函数指针变量作参数,求最大值、最小值和两数之和,void main(),int,a,b,max(int,int,),min(int,int),add(int,int,);,void,process(int,int,int,(*fun)();,scanf(%
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!