欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言教案8-指针.ppt

    • 资源ID:24475854       资源大小:255KB        全文页数:24页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言教案8-指针.ppt

    地址和指针 在计算机中,内存是用来存储程序和数据的部件。为了便于存储,通常把内存划分成许多个存储单元,并且对存储单元进行编号,存储单元的编号称为地址。地址通常以字节为单位进行编址。 在C语言中地址是指数据在内存中存放的起始位置,如:变量(整型、浮点型、字符型、数组元素)的地址 用 & 表示数组的地址 用数组名表示。数组的地址就是数组中第一个元素的地址字符串常量的地址 直接写出字符串,表示字符串的第一个字符的地址函数的地址 用函数名表示。函数的地址就是函数的入口地址指针:存放地址的变量叫指针,也叫指针变量。指针变量的值是另一变量的地址,指针变量的值可以改变。指针变量的内容是所指变量的值。 地址是一个常量如&i 、数组名如a( 或&a0 ),其值不能改变。指针变量指针变量的说明方式: *例:int *ptr,i=5; i是一个整型变量,ptr是一个指向整型变量的指针 ptr=&i; &i是变量i的地址(指针常量),ptr是一个指针(指针变量)指针变量的运算符:* 取指针变量所指的内容& 取变量的地址上例中,*ptr=i &i=ptr &*ptr=ptr *&i=i注意: * 出现在C程序的不同场合具有不同的含义。例81#include void main() int a=5,b=10,c=15; int *pa,*pb,*pc; pa=&a; pb=&b; pc=&c; printf(%dt%dt%dn,a,b,c); printf(%dt%dt%dn,*pa,*pb,*pc); printf(%dt%dt%dn,*&a,*&b,*&c); printf(%xt%xt%xn,pa,pb,pc); printf(%xt%xt%xn,&a,&b,&c); printf(%xt%xt%xn,&*pa,&*pb,&*pc); printf(%xt%xt%xn,&pa,&pb,&pc);指针作为函数参数 比较下面的例子#includevoid exchange(int x,int y) int temp; temp=x; x=y; y=temp;void main() int a=5,b=8; exchange(a,b); printf(a=%dtb=%d,a,b);运行结果:a=5 b=8#includevoid exchange(int *x,int *y) int temp; temp=*x; *x=*y; *y=temp;void main() int a=5,b=8; exchange(&a,&b); printf(a=%dtb=%d,a,b);运行结果: a=8 b=5指针与数组 在C语言中,数组名是指针常量,它代表的是数组的首地址,也是数组第一个元素的地址。设有: int data10;则:data=&data0 data+i=&datai *(data+i)=datai例:83data data0data+1 data1data+i datai例:使用指针作为形参和实参#include#includeint min(int *p,int n);main() static int a7=-1,9,7,3,-100,0,8; clrscr(); printf(minvalue=%d,min(a,7);int min(int *p,int n) int i,minv; minv=*p; for(i=1;i*(p+i) minv=*(p+i);return minv;数组名做为实参,传递数组的首地址(地址常量)指针变量做为形参,接收数组的首地址例:以数组和数组元素形式处理指针#include#includeint min(int *p,int n);main() static int a7=-1,9,7,3,-100,0,8; clrscr(); printf(minvalue=%d,min(a,7);int min(int p ,int n) *p 改为 p ,用下标法表示指针对象 int i,minv; minv=p0; *p改为 p0 for(i=1;ipi) minv=pi; *(p+i)改为 pireturn minv; pi表示当前指针后第i个对象P 形式上像数组,实际上按指针方式处理例:再探数组和指针#include#includevoid main() int a7=-1,9,7,3,-100,0,8; int i,*p; clrscr(); p=a; for(i=0;i7;i+) printf(%dt,ai); printf(n); for(i=0;i7;i+) printf(%dt,pi);两次运行结果相同指针的运算p=&i将变量i的地址赋给指针pp=array将一维数组的首地址赋给指针pp=&arrayi 将数组元素的地址赋给指针pp1=p2将指针变量p2的值赋给指针变量p1p1、p2指向同一个变量的地址p=NULL将指针p赋空值,不指向任何对象p+使p指向下一个对象区别于i+、i-P-使p指向前一个对象p+=i使p指向当前对象后第i个对象区别于x=x+i、x=x-ip-=i使p指向当前对象前第i个对象p+i指向当前对象p后第i个对象指针p不变p-i指向当前对象p前第i个对象指针运算例:#include void main() int a8=-1,9,7,3,-100,0,8,5; float b8=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=&a3; pa1=&a5; printf(%dn,pa1-pa); if(papa1) printf(); else printf(); 字符指针字符指针指向字符串或字符型数组。例:#includevoid main() char a=I am a Teacher.; char *ptr1=a,*ptr2=“You are Students.”; ptr1指向字符型数组a,ptr2指向字符串 printf(“%c%c%c%cn”,*ptr1,*(ptr1+2),*(ptr1+5),*(ptr1+7); 显示:IaaT printf(“%c%c%cn”,*ptr2,*(ptr2+4),*(ptr2+8); 显示:YaS printf(“%sn”,“She is a Student.”); 对应%s的是字符串常量 printf(“%sn”,a); 对应%s的是字符型数组首地址 printf(“%sn”,ptr2); 对应%s的是字符指针变量字符数组和字符指针处理字符串的区别n字符数组由若干个元素组成,每个元素存放一个字符,若用来处理字符串,必须保证有串结束符0。而字符指针变量用来存放字符串的首地址,不是用来存放整个字符串内容的。n赋值或初始化方式不完全相同char data20=“This is a string”;char data20;data=“This is a string”; 没有意义char *ptr=“This is a string”;char *ptr;ptr=“This is a string”; 等效字符数组和字符指针处理字符串的区别n在说明一个字符数组后,其地址是确定的,有一个连续的区域用来存储数组的内容;而说明一个字符指针变量时,仅仅分配一个存储单元存放地址值,如果未赋值,它指向的对象是不确定的。char data20;scanf(“%s”, data);char *ptr ;scanf(“%s”,ptr); 错误,ptr未初始化,不知道往那存字符数组和字符指针处理字符串的区别n字符指针变量的值可以改变,数组的首地址却不能改变。main() char *ptr=“C Language”;ptr+=2;printf(“%s”,ptr); main() char str=“C Language”;str+=2; printf(“%s”,str); 错误,数组地址不能改变应改成 printf(“%s”,str2); 指针数组n由指针变量组成的数组,其说明格式为:*;例:int *p3; 分别说明了3个指针*p0、*p1、*p2,指向3个整型变量或整型数组。例:int (*p)3; 说明了1个指针*p,指向有3个元素的一维整型数组。指向指针的指针int i,*p,*t;p=&i;t=&p;i是整型变量;p是指向整型变量i的指针;t是指向指针p的指针。指向函数的指针n指向函数的指针就是指向函数的首地址,又称函数的入口地址。n对于指向函数的指针而言,取内容表示执行由函数指针变量所指的函数。n用户定义函数的函数名即是函数的首地址。n指向函数的指针说明如下:(*)( );(*)(参数列表 );例:8-14#includeint min(int m,int n) if(mn) return m; else return n; void main() int a,b,c,(*p)(int,int); 定义函数指针变量 p=min; 函数名赋值给函数指针 scanf(%d%d,&a,&b); c=(*p)(a,b); 调用函数 printf(a=%d,b=%d,min=%dn,a,b,c);例:8-15#includeint max(int x,int y) return (xy)?x:y; int min(int x,int y) return (xy)?x:y; int add(int x,int y) return (x+y); void general( int x,int y,int (*fun)(int,int)int result; result=(*fun)(x,y); printf(%dn,result);void main() int a,b;printf(Enter a and b:);scanf(%d%d,&a,&b);printf(max=);general(a,b,max);printf(min=);general(a,b,min);printf(sum=);general(a,b,add);字符串的输入输出方法字符串的输出方法:使用printf(“%s”,string)使用printf(“%c”,stringI)使用puts(string)字符串的输入方法:使用char string= “I am sorry”使用scanf(“%s”,string) 以空格键、Tab键、和回车键作为结束使用gets(string) 仅以回车键作为结束字符串处理函数字符串库函数,函数原型在string.h中。1读取字符串函数gets(字符数组)2输出字符串函数puts(字符数组)3字符串拷贝函数strcpy(目的字符数组,源字符数组)4部分字符串拷贝函数strncpy(目的字符数组,源字符数组,拷贝字符数)5字符串比较函数strcmp(字符数组1,字符数组2)6字符串连接函数strcat(目的字符数组,源字符数组)7字符串长度函数strlen(字符数组)8大小写字母转换函数strupr(字符数组)strlwr(字符数组)

    注意事项

    本文(C语言教案8-指针.ppt)为本站会员(豆****)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开