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

上传人:精*** 文档编号:1135587 上传时间:2024-09-26 格式:PPT 页数:26 大小:563KB
下载 相关 举报
C语言程序设计第二十一讲 指针(4).ppt_第1页
第1页 / 共26页
C语言程序设计第二十一讲 指针(4).ppt_第2页
第2页 / 共26页
C语言程序设计第二十一讲 指针(4).ppt_第3页
第3页 / 共26页
C语言程序设计第二十一讲 指针(4).ppt_第4页
第4页 / 共26页
C语言程序设计第二十一讲 指针(4).ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

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