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

    c语言-指针教案.ppt

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

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

    c语言-指针教案.ppt

    内内 容容 提提 要要u 指针的概念;指针的概念;u 定义指向各种数据类型的指针;定义指向各种数据类型的指针; u 指针做函数的参数;指针做函数的参数; 难点:指针与数组应用难点:指针与数组应用u 用字符数组存取字符串;用字符数组存取字符串;u 使用字符串处理函数处理字符串;使用字符串处理函数处理字符串;u 结构体。结构体。 第一节第一节 变量的地址和指针变量的地址和指针 第二节第二节 指针变量的定义和引用指针变量的定义和引用 第三节第三节 指针与指针与数组数组 第四节第四节 指针与指针与字符串字符串 第五节第五节 指针与指针与结构体 第六节 指针与函数函数 练习题第一节 变量的地址和指针一一地址和指针地址和指针二二访问变量的方式访问变量的方式三三指针变量指针变量寻找保险箱密码 一个关于特工一个关于特工008008寻找保险箱密码的故事寻找保险箱密码的故事关键点分析关键点分析得到线索:得到线索:02170217单元的单元的“虎跑号虎跑号”寄存箱寄存箱 提示地址:提示地址:19761976单元单元找到目标:找到目标:“龙井号龙井号”寄存箱寄存箱取出内容:取出内容:911911寻找密码的途径分析u密码密码911911存放在某个寄存箱内,如果我们知存放在某个寄存箱内,如果我们知道这个寄存箱的名字,就能够找到密码道这个寄存箱的名字,就能够找到密码 u如果不知道密码所在的寄存箱名字,知道如果不知道密码所在的寄存箱名字,知道该寄存箱的地址也照样能够取出密码该寄存箱的地址也照样能够取出密码 u如果寄存箱的地址也不知道,但是有另外如果寄存箱的地址也不知道,但是有另外一个地方存放这个寄存箱的地址,就能顺一个地方存放这个寄存箱的地址,就能顺藤摸瓜,间接找到密码藤摸瓜,间接找到密码密码存放示意图龙井号龙井号9111976虎跑号虎跑号19760217名字虎跑号龙井号地址02171976内容1976911利用指针模拟寻找保险箱密码的过程利用指针模拟寻找保险箱密码的过程 获取密码的两种方法获取密码的两种方法 int main(void) int key = 911; /* 变量变量key存放密码存放密码 * */int *addr; /* 变量变量addr存放地址存放地址 * */ addr = &key; /* 将将key的地址赋给的地址赋给addr */ /* 通过变量通过变量key输出密码值输出密码值* */ printf(The key is: %dn, key); /* 通过变量通过变量key的地址来输出密码值的地址来输出密码值 * */printf(If I know the address of the key, I also can get it: %dn, *addr); return 0; The key is: 911If I know the address of the key, I also can get it: 911 地址和指针地址和指针 内存单元内存单元地址地址 内容内容 变量变量int x = 20, y = 1, z = 155;printf(%d, x;)直接访问直接访问:通过变量名访问:通过变量名访问间接访问间接访问:通过另一个变量访通过另一个变量访问问把变量的地址放到另一变量中把变量的地址放到另一变量中使用时先找到后者使用时先找到后者再再从从中取出前者的地址中取出前者的地址1000 20 x1004 1 y1008 155 z2000 1000 p地址地址 指针变量指针变量v地址地址 在程序中所定义的变量,编译系统会根据在程序中所定义的变量,编译系统会根据变量的类型,分配一定长度的存储空间。内存中每一变量的类型,分配一定长度的存储空间。内存中每一个存储单元的有唯一编号。如:个存储单元的有唯一编号。如: int a 4个字节个字节 float b 4个字节个字节65.32000 2004 2008 a bv 指针指针 指针就是地址指针就是地址地址和指针地址和指针 直接访问方式直接访问方式 按变量的地址存取变量的值 。 间接访问方式间接访问方式 按变量的地址的地址存取变量的值。访问变量的方式访问变量的方式20006pa(1000)a(2000)指针指针 一个变量的地址称为该变量的指针。如地址一个变量的地址称为该变量的指针。如地址20002000是变量是变量a a的指针。的指针。指针变量指针变量 如果有一个变量专门用来存放另一个变量的地如果有一个变量专门用来存放另一个变量的地址(即指针),称为指针变量。如址(即指针),称为指针变量。如papa是一个指针变是一个指针变量,量,papa中的值为指针中的值为指针。指针变量指针变量一、指针变量的定义二、指针变量的引用第二节 指针变量的定义和引用 数据类型说明符数据类型说明符 * *标识符;标识符; 例如:int * pt;定义指向整型变量的指针指向整型变量的指针变量变量合法标识符合法标识符指针变量名指针变量名例如例如 int a,b; int *p1,* *p2; p1&a; p2&b; &ap1p2ab&b引用第二节第二节 指针变量的定义和引用指针变量的定义和引用 C语言中的指针运算符语言中的指针运算符:取变量地址运算符:取变量地址运算符:“指向指向”运算符或称运算符或称“间接访问间接访问”运算运算符符例如:例如:&a &a 变量变量a a的地址的地址 * *p p 指针变量指针变量p p所指向的变量所指向的变量#include void main( ) int a,*pi; float f,*pf; a=10; f=1.5; pi=&a; pf=&f; printf(“%d,%fn”, a, f); printf(“%d,%fn”,*pi,*pf); 例例6.1 指针变量的使用指针变量的使用pipfaf&a&f1.51010,1.50000010,1.500000#include void main() int a,b,*p,*p1,*p2; a=3;b=6; p1=&a; p2=&b; p=p1; p1=p2; p2=p;printf(%d %dn,*p1,*p2);printf(%d %dn,a,b);单击鼠标,演示程序的执行过程:p1p2pab&a&b63&a&b&a例例6 6.2 交换指针的指向交换指针的指向#include void main() int a,b,temp,*p1,*p2; a=3;b=6; p1=&a; p2=&b; temp=*p1; *p1=*p2; *p2=temp;printf(%d %dn,a,b);p1p2tempab&a&b63例例6 6.3 交换指针指向的变量值交换指针指向的变量值633一一、指向一维数组的指针变量指向一维数组的指针变量 二二、*指向二维数组的指针变量指向二维数组的指针变量第三节第三节 指针与数组指针与数组定义定义 int a5; int *p; p&a0;或pa;说明说明 指针的类型必须同于数组元素的类型指针的类型必须同于数组元素的类型 定义指针的同时赋予数组的首地址。定义指针的同时赋予数组的首地址。例如:例如: int a8; int *pa;指向一维数组的指针变量指向一维数组的指针变量a0a1a2a3a4p2000a0a1a2a3a4通过指针变量来引用一维数组的元素通过指针变量来引用一维数组的元素例如:例如:int a8,i; int *pa;下标法:下标法: 用用ai 来引用数组来引用数组a的第的第i个数组元素,个数组元素,指针法:指针法: 用用* *(ai),* *(pi)引用数组的第引用数组的第i个数组个数组元素。元素。#include#includevoid main() int a10,*p ,i; for(i=0; i10; i+) ai=i; for(p=a; p(a+10); p+) printf(%d ,*p); 例6.6 数组元素的引用#include#includevoid main() int a10,i; for( i=0; i10; i+) ai=i; for(i=0;i10;i+) printf(%d ,ai); *(a+i); p+使指针使指针p指向数组的下一个元素。指向数组的下一个元素。 *p+等价于等价于*(p+),其作用是先得到),其作用是先得到p指向变量的值指向变量的值(即(即*p),然后再使),然后再使p+1赋给赋给p。 *(p+)与)与*(+p)的作用不同。前者是先取)的作用不同。前者是先取*p的值,的值,然后使指针变量然后使指针变量p加加1;后者是先使指针变量;后者是先使指针变量p的值加的值加1,再取再取*p。 p+n p+n 只是地址变化,指针没有移动。只是地址变化,指针没有移动。 指针运算指针运算 #include #includevoid main( ) int x =1,2,3,4,5,6,7,8,9,0; int *p=x; printf(“%dt”,*p+); printf(“%dt”,*(p+8); printf(“%dn”,*-p); 练习练习1 0 1 用指针变量来作为函数的参数,根据形式参数和实用指针变量来作为函数的参数,根据形式参数和实际参数的用法可以有以下际参数的用法可以有以下4 4种形式:种形式:实际参数:数组名实际参数:数组名 指针变量指针变量形式参数:数组名形式参数:数组名 指针变量指针变量指针变量作为函数的参数#include #include void main( )void main( ) int a10=1,3,5,7,9,11,13,15,17,19; int a10=1,3,5,7,9,11,13,15,17,19; int i, int i,* *p; void invert(int p; void invert(int * *p,int n );p,int n ); p=a; p=a;printf(printf(“数组交换前的顺序为:数组交换前的顺序为:nn”););for(i=0;i10;i+) printf(for(i=0;i10;i+) printf(“%5d%5d”,ai);,ai);invert(p,10); invert(p,10); printf(printf(“nn数组交换后的顺序为:数组交换后的顺序为:nn”);); for(i=0;i10;i+) for(i=0;i10;i+) printf( printf(“%5d%5d”,ai);,ai);例例6.7 将数组中的将数组中的n个数逆序存放个数逆序存放指针当实参指针当实参void invert(int void invert(int * *p,int n)p,int n) int i, int i,* *q,temp;q,temp; q=p+n-1; q=p+n-1; for(i=0;in/2;i+) for(i=0;in/2;i+) temp= temp=* *p;p; * *p=p=* *q;q; * *q=temp;q=temp; p+; p+; q-; q-; 函数定义函数定义一、字符串的表示形式二、指向字符串指针变量的应用第四节 指针与字符串两种方法两种方法 用字符数组实现用字符数组实现例如: char str“C language”; 用字符指针实现用字符指针实现例如: char *pstr“C language”; 或或 char char * *pstr;pstr; pstr= pstr= “C language”;字符串的表示形式#include #include void main( )void main( )int strlenth(char int strlenth(char * *p);p); char str80; char str80; int i,len;char int i,len;char * *p; p; gets(str); gets(str); p=str; p=str; len=strlenth(p); len=strlenth(p); printf( printf(“%5d%5d”,len);,len); 例例 6.8 写一函数,求一个字符串的长度写一函数,求一个字符串的长度(c68.cpp)int strlenth(char *p) int len=0; while(*p!=0) len=len+1; p+; return(len); #include void main( ) char st20,*pc; pc=st; scanf(“%s”,pc); printf(“%sn”,pc); 指向字符串指针变量的应用pc3000例6.9 输入一字符串并输出,用字符指针变量来实现。st0st1st18.w0!e#include void main( ) char a80,b80,*pa,*pb; pa=a; pb=b; gets(pa); while(*pa!=0) *pb=*pa; pa+; pb+; *pb=0; printf(“%s”,b) ;例例 6.10 将字符串将字符串a复制到字符串复制到字符串b。0wel0papba0b0#include void main( ) char *s1=C language; s1+=2; printf(%sn,s1); 例例6 6.11 输出字符串中的部分数据输出字符串中的部分数据运行结果运行结果language#include “stdio.h” void main( ) void del_ch(char *p,char ch ); char str80,*pt,ch; printf(“pls enter a str:n”); gets(str); pt=str;printf(“pls enter the char deleted:n”);ch=getchar(); del_ch(pt,ch);printf(“the new stirng is:n%sn”,str); 例6.12 有一行字符,要求删去指定的字符。例如:“He has 350$.”如果删去“0”,则变为“He has 35$”。 void del_ch(char *p,char ch) char *q=p; for(; *p!=0;p+) if(*p!=ch) *q=*p; q+; *q=0; welcome0pqqpp指向结构体变量的指针定义了一个定义了一个struct stud类型,可用下面形式定义类型,可用下面形式定义一个指向这种类型数据的指针变量:一个指向这种类型数据的指针变量: struct stud *p;用指针变量用指针变量p可以指向任一个属于可以指向任一个属于struct stud类类型的结构体变量。型的结构体变量。第五节 指针与结构体例例6.12-1 6.12-1 定义指向结构体的指针变量定义指向结构体的指针变量 #include stdio.h #include string.h #include string.h struct stud struct stud long num; long num; char name20; char name20; char gender; char gender; int age; int age; float score; float score; ; ; void main() struct stud student1; struct stud *p; p=&student1; student1.num=970101; strcpy(student1.name,Liu Li); student1. gender =M; student1.age=16; student1.score=95.5; printf(No:%ldnname:%sn gender :%cnage:%dnscore:%6.2fn,student1.num,student1.name,student1. gender,student1.age,student1.score);printf(nNo:%ldnname:%sn gender :%cnage:%dnscore:%6.2fn, (*p).num,(* *p).name,(*p). gender,(*p).age,(*p).score); 程序运行结果如下程序运行结果如下:No:970101name:Liu Ligender:Mage:16score: 95.50No:970101name:Liu Ligender :Mage:16score: 95.50 说明说明 (*p)num p- num 等价等价 “ “-”运算符的优先级别最高。运算符的优先级别最高。一一、指针作函数的参数指针作函数的参数 二二、函数返回指针指针 三、函数指针三、函数指针第六节第六节 指针与函数指针与函数 指针变量存放的是地址值,同样可指针变量存放的是地址值,同样可以作为函数的参数来进行以作为函数的参数来进行“地址传送地址传送”。 实际参数为地址常量或指针变量实际参数为地址常量或指针变量形式参数为指针变量。形式参数为指针变量。指针作函数的参数void main()void main() int a,b,max; int a,b,max; int int * *pa,pa,* *pb;pb; printf( printf(输入输入a a 和和 b:n);b:n); scanf(%d,%d,&a,&b); scanf(%d,%d,&a,&b); pa = &a; pb = &b; pa = &a; pb = &b; if(ab) if(ab) swap(pa, pb); swap(pa, pb); printf(max=%d n,a); printf(max=%d n,a); #include#includevoid swap(int *p1,int *p2) int temp; temp=*p1; *p1=*p2; *p2=temp; 例例6.13 6.13 用函数来实现求两数中的大者用函数来实现求两数中的大者swap( )swap( )能否写成下面这种形式呢?能否写成下面这种形式呢? swap(int swap(int * *p1,int p1,int * *p2)p2) int int * *p;p; p=p1; p=p1; p1=p2; p1=p2; p2=p; p2=p; ?函数返回指针 定义形式定义形式 类型说明符类型说明符 * *函数名函数名( (参数表参数表) ) 函数体函数体 例如:例如:int *search(int *x, int n) int *p; p=x+n; return(p); 例6.14 对例6.13的功能用返回指针的函数来实现#include#includeint int * *max( int max( int * * p1,int p1,int * * p2) p2) int int * *r;r; if( if(* *p1 p1 * *p2) r = p1; p2) r = p1; else r = p2; else r = p2; return r; return r; int main()int main() int a,b; int a,b; int int * *p;p; printf( printf(输入输入a a 和和 b:n);b:n); scanf(%d,%d,&a,&b); scanf(%d,%d,&a,&b); p = max( &a , &b ); p = max( &a , &b ); printf(max = %d, printf(max = %d,* *p);p); return 0; return 0; 例6.15 解密藏头诗#includeint main() char *change(char s20,char t); int i; char s420,t10,*p; printf(请输入诗:请输入诗:n); for(i=0;i4;i+)scanf(%s,si);p=change(s,t);printf(解密:解密:n);printf(%sn,p);return 0; char *change(char s20,char t) int i; for(i=0;i4;i+) t2*i=si0; t2*i+1=si1; t2*i=0; return t; 一叶轻舟向东流一叶轻舟向东流帆梢轻握杨柳手帆梢轻握杨柳手风纤碧波微起舞风纤碧波微起舞顺水任从雅客悠顺水任从雅客悠一个函数在内存中占一片存储空间一个函数在内存中占一片存储空间 。在函数被。在函数被编译时,被分配给一个入口地址,这个编译时,被分配给一个入口地址,这个入口地址入口地址就称为就称为函数的指针函数的指针。用一个指针变量指向函数,然后用指向函数的用一个指针变量指向函数,然后用指向函数的指针变量代替函数名来调用这个函数。指针变量代替函数名来调用这个函数。函数指针函数指针 形式:形式: 类型说明符类型说明符 ( (* *指针变量名指针变量名)()(参数表参数表 );); 例如:例如: int (int (* *p)(int,int);p)(int,int); 表示定义了一个指向函数的指针变量表示定义了一个指向函数的指针变量p p,函数的返回值,函数的返回值是整型。是整型。函数的调用形式函数的调用形式 (* *指针变量)(实参表列指针变量)(实参表列););例如例如 注意!与 int int * *p( )p( )的区别函数指针的定义函数指针的定义m=min(a,b);练习题1.有以下程序有以下程序#include void main()char *s=“ABC”;do printf(“ %d”, *s%10); s+;while(*s); A)5670 B)656667 C) 567 D) ABCC2.有以下程序#include void fun(char *s)while(*s) if(*s%2=0) printf(“ %c”, *s);s+;void main()char a=“good”;fun(a);printf(“n”);注意:字母注意:字母a的的ASCII码值为码值为97,程序运行后的输出结果,程序运行后的输出结果是是A) d B) go C) god D) goodA3.#include void fun(int *a, int *b) int *c;c=a; a=b; b=c;void main() int x=3,y=5,*p=&x,*q=&y;fun(p,q); printf(“ %d, %d, ”, *p,*q);fun(&x,&y); printf(“ %d, %dn ”, *p,*q);程序运行后的输出结果是程序运行后的输出结果是A) 3,5,5,3 B) 3,5,3,5 C) 5,3,3,5 D) 5,3,5,3B4.有以下程序有以下程序#include int b=2; int fun(int *k) b=*k+b; return (b); void main()int a10=1,2,3,4,5,6,7,8, i;for(i=2;i4;i+) b=fun(&ai)+b; printf(“ %d ” , b); printf(“ n ”);程序运行后的输出结果是程序运行后的输出结果是A) 10 12 B) 8 10 C)10 28 D) 10 16C5.写出程序运行结果写出程序运行结果#include void p (int *x, int y) +*x; y-; void main ( ) int x=0,y=3; p (&x, y); printf ( %d, %d, x, y );1,36.写出程序运行结果写出程序运行结果 #include #include void main ( ) char a =“Language”, b20; char *p1, *p2; int k, n; n=strlen(a); p1=a+n-1; p2=b; for ( k=0; kn; k+) *p2=*p1; p1-; p2+; *p2=0; puts(b);逆序复制#include #include void main() void change(char *p);char str80, *p; gets(str); p=str; change(p); puts(str); void change(char *p) char *q; q=p; for(;*q!=0;q+) if(*q=A & *q=a & *q=z) *q=*q-32; else *q=*q; u输入输入abc123ABC7.写出程序运行结果写出程序运行结果ABC123abc 9 利用函数利用函数abcd来交换来交换main中的两个变量的值。中的两个变量的值。 #include void main( )void abcd(float *x,float *y); float x=10, y=20; abcd ( ); printf (%.1f, %.1fn, x, y);void abcd (float *x, float *y) float temp; temp = ; ; ; 10.编写一个函数将给定字符串中的大写编写一个函数将给定字符串中的大写字母转换成小写字母,主函数中输入一字母转换成小写字母,主函数中输入一个字符串,调用该子函数,进行转换,个字符串,调用该子函数,进行转换,将原字符串及转换后的字符串输出。将原字符串及转换后的字符串输出。#include #include void main() void change(char *p);char str80, *p; gets(str); p=str; change(p); puts(str);void change(char *p) char *q; q=p; for(;*q!=0;q+) if(*q=A & *q=a & *q=z) *q=*q-32; else *q=*q;

    注意事项

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

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开