ImageVerifierCode 换一换
格式:PPT , 页数:26 ,大小:563KB ,
资源ID:1135587      下载积分:10 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-1135587.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言程序设计第二十一讲 指针(4).ppt)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

C语言程序设计第二十一讲 指针(4).ppt

1、C语言程序设计基础主讲人:庞新苗手机:13560715936第二十一讲:指针(4)指针数组和指向指针的指针主要内容:主要内容:1、指针数组的应用;、指针数组的应用;2、指向指针的指针;、指向指针的指针;一、一、指针数组和多级指针指针数组和多级指针用于处理二维数组或多个字符串用于处理二维数组或多个字符串指针数组指针数组定义:数组中的元素为指针变量定义:数组中的元素为指针变量定义形式:定义形式:存储类型存储类型 数据类型数据类型*数组名数组名数组长度说明数组长度说明;例例 int *p4;指针所指向变量的数据类型指针所指向变量的数据类型指针本身的存储类型指针本身的存储类型区分int *p4与int

2、 (*p)4指针数组赋值与初始化指针数组赋值与初始化赋值:main()int b23,*pb2;pb0=b0;pb1=b1;.int *pb2pb0pb1int b23123246初始化:main()int b23,*pb=b0,b1;.int *pb2pb0pb1int b23123246指针数组赋值与初始化指针数组赋值与初始化L i s p 0F o r t r a n 0B a s i c 0p0p1p2p30赋值:main()char a=Fortran;char b=Lisp;char c=Basic;char*p4;p0=a;p1=b;p2=c;p3=NULL;.或:main()c

3、har*p4;p0=Fortran;p1=Lisp;p2=Basic;p3=NULL;.初始化:main()char*p=Fortran,Lisp,Basic,NULL;.L i s p 0F o r t r a n 0B a s i c 0p0p1p2p30 char name59=“gain”,“much”,“stronger”,“point”,“bye”;char*name5=“gain”,“much”,“stronger”,“point”,“bye”;g a i n 0s t r o n g e r 0p o i n t 0m u c h 0name0name1name2name3na

4、me4b y e 0g a i n 0s t r o n g e r 0p o i n t 0m u c h 0b y e 0二维数组与指针数组区别二维数组与指针数组区别:二维数组存储空间固定字符指针数组相当于可变列长的二维数组分配内存单元=数组维数*2+各字符串长度指针数组元素的作用相当于二维数组的行名但指针数组中元素是指针变量二维数组的行名是地址常量main()int b23,*pb2;int i,j;for(i=0;i2;i+)for(j=0;j3;j+)bij=(i+1)*(j+1);pb0=b0;pb1=b1;for(i=0;i2;i+)for(j=0;j3;j+,pbi+)prin

5、tf(b%d%d:%2dn,i,j,*pbi);例例 用指针数组处理二维数组用指针数组处理二维数组int *pb2pb0pb1int b23b00 *pb0b01 *(pb0+1)b02 *(pb0+2)b10 *pb1b11 *(pb1+1)b12 *(pb1+2)123246例例 对字符串排序(简单选择排序)对字符串排序(简单选择排序)main()void sort(char *name,int n),print(char *name,int n);char*name=Follow me,BASIC,Great Wall,FORTRAN,Computer;int n=5;sort(name

6、,n);print(name,n);void sort(char*name,int n)char*temp;int i,j,k;for(i=0;in-1;i+)k=i;for(j=i+1;j0)k=j;if(k!=i)temp=namei;namei=namek;namek=temp;name0name1name2name3name4nameGreat WallFORTRANComputerFollow meBASICkjkjjji=0例例 对字符串排序(简单选择排序)对字符串排序(简单选择排序)main()void sort(char *name,int n),print(char *nam

7、e,int n);char*name=Follow me,BASIC,Great Wall,FORTRAN,Computer;int n=5;sort(name,n);print(name,n);void sort(char*name,int n)char*temp;int i,j,k;for(i=0;in-1;i+)k=i;for(j=i+1;j0)k=j;if(k!=i)temp=namei;namei=namek;namek=temp;name0name1name2name3name4nameGreat WallFORTRANComputerFollow meBASICkkjjji=1k

8、例例 对字符串排序(简单选择排序)对字符串排序(简单选择排序)main()void sort(char *name,int n),print(char *name,int n);char*name=Follow me,BASIC,Great Wall,FORTRAN,Computer;int n=5;sort(name,n);print(name,n);void sort(char*name,int n)char*temp;int i,j,k;for(i=0;in-1;i+)k=i;for(j=i+1;j0)k=j;if(k!=i)temp=namei;namei=namek;namek=te

9、mp;name0name1name2name3name4nameGreat WallFORTRANComputerFollow meBASICkkjji=2例例 对字符串排序(简单选择排序)对字符串排序(简单选择排序)main()void sort(char *name,int n),print(char *name,int n);char*name=Follow me,BASIC,Great Wall,FORTRAN,Computer;int n=5;sort(name,n);print(name,n);void sort(char*name,int n)char*temp;int i,j,

10、k;for(i=0;in-1;i+)k=i;for(j=i+1;j0)k=j;if(k!=i)temp=namei;namei=namek;namek=temp;name0name1name2name3name4nameGreat WallFORTRANComputerFollow meBASICkkji=3例例 对字符串排序(简单选择排序)对字符串排序(简单选择排序)main()void sort(char *name,int n),print(char *name,int n);char*name=Follow me,BASIC,Great Wall,FORTRAN,Computer;in

11、t n=5;sort(name,n);print(name,n);void sort(char*name,int n)char*temp;int i,j,k;for(i=0;in-1;i+)k=i;for(j=i+1;j0)k=j;if(k!=i)temp=namei;namei=namek;namek=temp;name0name1name2name3name4nameGreat WallFORTRANComputerFollow meBASIC二、多级指针二、多级指针定义定义:指向指针的指针指向指针的指针一级指针一级指针:指针变量中存放目标变量的地址指针变量中存放目标变量的地址p1&p2&

12、i3P2(指针变量指针变量)i(整型变量整型变量)例例 int *p1;int *p2;int i=3;p2=&i;p1=&p2;*p1=5;二级指针二级指针:指针变量中存放一级指针变量的地址指针变量中存放一级指针变量的地址例例 int *p;int i=3;p=&i;*p=5;&i3P(指针变量指针变量)i(整型变量整型变量)一级指针一级指针单级间接寻址单级间接寻址二级指针二级指针一级指针一级指针目标变量目标变量二级间接寻址二级间接寻址定义形式:定义形式:存储类型存储类型 数据类型数据类型 *指针名;指针名;如如 char *p;例例 int i,*p;p=&i;()/p是二级指针,不能用变

13、量地址为其赋值是二级指针,不能用变量地址为其赋值指针本身的存储类型指针本身的存储类型最终目标变量的数据类型最终目标变量的数据类型*p p是是p p间接指向对象的地址间接指向对象的地址*p p是是p p间接指向对象的值间接指向对象的值例例 int i=3;int *p1;int *p2;p1=&i;p2=&p1;*p=5;ip1p23&i&p1*p2,*p1*p2多级指针多级指针例例 三级指针三级指针 int *p;四级指针四级指针 char *p;20002008200A20022004200612变量a 变量b(main)指针变量p2000 指针变量q2002例例 一级指针与二级指针一级指针

14、与二级指针#include void swap(int*r,int*s)int*t;t=r;r=s;s=t;main()int a=1,b=2,*p,*q;p=&a;q=&b;swap(p,q);printf(%d,%dn,*p,*q);20022000COPY 指针变量s 指针变量r(swap)指针变量t20002002200020002008200A20022004200612变量a 变量b(main)指针变量p2000 指针变量q2002例例 一级指针与二级指针一级指针与二级指针#include void swap(int*r,int*s)int*t;t=r;r=s;s=t;main()

15、int a=1,b=2,*p,*q;p=&a;q=&b;swap(p,q);printf(%d,%dn,*p,*q);输出:1,2例例 一级指针与二级指针一级指针与二级指针#include void swap(int*r,int*s)int*t;t=r;r=s;s=t;main()int a=1,b=2,*p,*q;p=&a;q=&b;swap(p,q);printf(%d,%dn,*p,*q);abpqabpqrsabpqsrabpq输出:1,2例例 一级指针与二级指针一级指针与二级指针#include void swap(int*r,int*s)int*t;t=*r;*r=*s;*s=t;

16、main()int a=1,b=2,*p,*q;p=&a;q=&b;swap(&p,&q);printf(%d,%dn,*p,*q);20002008200A20022004200612变量a 变量b(main)指针变量p2000 指针变量q200220062004COPY 二级指针s 二级指针r(swap)指针变量t200020022000例例 一级指针与二级指针一级指针与二级指针#include void swap(int*r,int*s)int*t;t=*r;*r=*s;*s=t;main()int a=1,b=2,*p,*q;p=&a;q=&b;swap(&p,&q);printf(%

17、d,%dn,*p,*q);20002008200A20022004200612变量a 变量b(main)指针变量p2000 指针变量q200220002002输出:2,1例例 一级指针与二级指针一级指针与二级指针#include void swap(int*r,int*s)int*t;t=*r;*r=*s;*s=t;main()int a=1,b=2,*p,*q;p=&a;q=&b;swap(&p,&q);printf(%d,%dn,*p,*q);abpqbapqabrspqabrspq输出:2,1例例 用二级指针处理字符串用二级指针处理字符串#define NULL 0void main()

18、char*p;char*name=hello,good,world,bye,;p=name+1;printf(%o:%s ,*p,*p);p+=2;while(*p!=NULL)printf(%sn,*p+);name0name1name2name3name4char*name5worldbye0hellogoodnamep运行结果:644:good bye用*p可输出地址(%o或%x),也可用它输出字符串(%s)p*(p+)二级指针与指针数组的关系二级指针与指针数组的关系int *p 与与 int *q10 指针数组名是二级指针指针数组名是二级指针常量常量p=q;p+i 是是qi的地址的地址

19、指针数组作形参,指针数组作形参,int *q 与与int*q完全等价;但作为变量定完全等价;但作为变量定义两者不同义两者不同系统只给系统只给p分配能保存一个指针值的内存区;而给分配能保存一个指针值的内存区;而给q分配分配10块内块内存区,每块可保存一个指针值存区,每块可保存一个指针值命令行参数命令行参数命令行:在操作系统状态下,为执行某个程序而键入命令行:在操作系统状态下,为执行某个程序而键入的一行字符的一行字符命令行一般形式:命令行一般形式:命令名命令名 参数参数1 参数参数2参数参数nmain(int argc,char *argv)命令行参数传递命令行参数传递带参数的带参数的main函数

20、形式:函数形式:C:TC copy.exe source.c temp.c有有3个字符串参数的命令行个字符串参数的命令行命令行中参数个数命令行中参数个数元素指向命令行参数元素指向命令行参数中各字符串首地址中各字符串首地址形参名任意形参名任意命令行命令行实参实参main(形参形参)系统自动调用系统自动调用mainmain函数时传递函数时传递第一个参数第一个参数:main所在的所在的可执行文件名可执行文件名例例 输出命令行参数输出命令行参数/*test.c*/main(int argc,char*argv)while(argc1)+argv;printf(%sn,*argv);-argc;main

21、(int argc,char *argv)while(argc-0)printf(%sn,*argv+);1.编译、链接test.c,生成可执行文件test.exe2.在DOS状态下运行(test.exe所在路径下)例如:C:TC test.exe hello world!运行结果:hello world!运行结果:test hello world!argv0argv1argv2char*argvworldtesthelloargvargc=3定义定义含义含义int i;int *p;int an;int *pn;int (*p)n;int f();int*p();int(*p)();int*

22、p;定义整型变量定义整型变量ip为指向整型数据的指针变量为指向整型数据的指针变量定义含定义含n个元素的整型数组个元素的整型数组an个指向整型数据的指针变量组成的指针数组个指向整型数据的指针变量组成的指针数组pp为指向含为指向含n个元素的一维整型数组的指针变量个元素的一维整型数组的指针变量f为返回整型数的函数为返回整型数的函数p为返回指针的函数,该指针指向一个整型数据为返回指针的函数,该指针指向一个整型数据p为指向函数的指针变量,该函数返回整型数为指向函数的指针变量,该函数返回整型数p为指针变量,它指向一个指向整型数据的指针变量为指针变量,它指向一个指向整型数据的指针变量指针的数据类型指针的数据

23、类型例例 下列定义的含义下列定义的含义(1)int *p3;(2)int (*p)3;(3)int *p(int);(4)int (*p)(int);(5)int *(*p)(int);(6)int(*p3)(int);(7)int *(*p3)(int);函数指针数组,函数返回函数指针数组,函数返回int型指针型指针指针数组指针数组指向一维数组的指针指向一维数组的指针返回指针的函数返回指针的函数指向函数的指针,函数返回指向函数的指针,函数返回int型变量型变量指向函数的指针,函数返回指向函数的指针,函数返回int 型指针型指针函数指针数组,函数返回函数指针数组,函数返回int型变量型变量作业作业

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922