《指针和函数》PPT课件.ppt

上传人:小飞机 文档编号:5515994 上传时间:2023-07-15 格式:PPT 页数:21 大小:343.47KB
返回 下载 相关 举报
《指针和函数》PPT课件.ppt_第1页
第1页 / 共21页
《指针和函数》PPT课件.ppt_第2页
第2页 / 共21页
《指针和函数》PPT课件.ppt_第3页
第3页 / 共21页
《指针和函数》PPT课件.ppt_第4页
第4页 / 共21页
《指针和函数》PPT课件.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《《指针和函数》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《指针和函数》PPT课件.ppt(21页珍藏版)》请在三一办公上搜索。

1、第13讲 指针和函数,第13讲 指针和函数,本讲主要内容指针作为函数的参数简单指针变量作函数参数指向数组的指针作函数的参数字符串指针作函数的参数指针数组作函数的参数带参数的main()函数指针函数和指向函数的指针变量动态内存分配函数简介,第13讲 指针和函数,教学目标熟练掌握用简单指针变量作函数的参数时函数的定义和调用方法。明确数组指针作函数参数和字符串指针作函数参数的异同,能正确定义和调用字符串指针作参数的函数。熟悉指针数组作参数的函数,了解它的主要用途。了解带参数main()函数的特点,掌握带参数main()函数中各个参数的意义,学会带参数main()函数的设计方法。了解指针函数的定义方法

2、及其应用。了解动态内存管理的概念及意义,熟悉动态内存管理函数。,一、指针作为函数的参数,指针可以指向任何类型的数据,因此通过指针能够实现任何类型的数据处理。函数使用指针参数,就可以使函数处理各种类型的数据。与基本数据类型的变量作函数参数的最大区别是,在函数间传递的不是变量的数值,而是变量的地址,这样可以通过函数直接处理实参指针指向的数据。,一、指针作为函数的参数,简单指针变量作函数参数 例12-1用swap()函数交换两个变量的值。void swap(int*p1,int*p2)int temp;temp=*p1;*p1=*p2;*p2=temp;main()int x,y;scanf(%d,

3、%d,一、指针作为函数的参数,指向数组的指针作函数的参数 例12-2 求一维数组的最大元素值。我们用三个函数实现这个程序:用输入函数input()建立数组;用max_a()函数求最大值;用main()函数作为主调函数。为了方便对函数编写,先假定数组长度为n,指针p指向该数组。,一、指针作为函数的参数,void input(int*p,int n)int i;for(i=0;imax)max=*(p+i);return(max);main()int a10;input(a,10);printf(MAX=%dn,max_a(a,10);,一、指针作为函数的参数,例12-3 利用一维数组的排序函数对

4、数组排序。,void p_sort(int*,int);void output(int*,int);main()int a10=3,-5,8,16,7,19,11,6,17,5;p_sort(a,10);printf(result:);output(a,10);void p_sort(int*p,int n)int i,temp,*q;for(i=1;i*(q+1),temp=*q;*q=*(q+1);*(q+1)=temp;void output(int*p,int n)int*q;for(q=p;qp+n;q+)printf(%d,*q);printf(n);,一、指针作为函数的参数,字符

5、串指针作函数的参数,#include stdio.hmain()void copy_s(char*,char*);char a20,b30;gets(a);copy_s(a,b);puts(b);void copy_s(char*str1,char*str2)while(*str2=*str1)!=0)str1+;str2+;,例12-5 用字符串指针作函数参数,将输入的一个字符串复制到另一个字符串中。,一、指针作为函数的参数,指针数组作函数的参数 例12-7将一组字符串按字典顺序排序后输出。,void string_sort(char*string,int n)char*temp;int i

6、,j;for(i=1;i0)temp=string j;string j=string j+1;string j+1=temp;void string_out(char*string,int n)int i;for(i=0;in;i+)printf(%s,string i);,#include stdio.h#include string.hmain()void string_sort(char*,int);void string_out(char*,int);char*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

7、;string_sort(days,7);string_out(days,7);,一、指针作为函数的参数,使用参数的main()函数 指针数组的一个重要应用是作为main()函数的形参,带参数的main函数的一般形式如下:main(int argc,char*argv)其中:argc表示命令行参数个数,argv是指向命令行参数的指针数组。在操作系统下运行程序时,可以以命令行参数形式向main()函数传递参数。命令行参数的一般形式是:运行文件名参数1参数2参数n运行文件名和参数之间、各个参数之间要用一个空格分隔。指针argv0指向的字符串是运行文件名,argv1指向的字符串是命令行参数1,arg

8、v2指向的字符串是命令行参数2,等等。,一、指针作为函数的参数,例12-8 带参数的main()函数举例#include stdio.hmain(int argc,char*argv)int i;printf(argc=%dn,argc);for(i=1;iargc;i+)printf(%sn,argvi);,二、指针函数和指向函数的指针变量,指针函数 函数返回值是指针类型的函数称为指针函数。指针函数的定义与其他函数有一定区别,需要在函数名前使用“*”符。一般格式如下:数据类型*函数名(形参表)函数体,二、指针函数和指向函数的指针变量,例12-9将一组字符串中长度最大的找出来,并输出这个字符串

9、。,char*max_lenth(char*string,int n)int i,posion,max_l;posion=0;max_l=strlen(string0);for(i=1;imax_l)max_l=strlen(stringi);posion=i;return(stringposion);,#include stdio.h#include string.hmain()char*max_lenth(char*,int);char*p_string4=Sydney2000,Beijing2008,Athens1996,Korea1992;char*p;p=max_lenth(p_st

10、ring,4)puts(p);,二、指针函数和指向函数的指针变量,指向函数的指针变量 在定义一个函数之后,编译系统为每个函数确定一个入口地址,当调用该函数的时候,系统会从这个“入口地址”开始执行该函数。存放函数的入口地址的变量就是一个指向函数的指针变量,简称函数的指针。函数的指针的定义方式是:数据类型(*指针变量名)()和变量的指针一样,函数的指针也必须赋初值后才能指向具体的函数。由于函数名代表了该函数的入口地址,因此,通常直接用函数名为函数指针赋值,即:函数指针名=函数名例如:double fun();/*函数说明*/double(*f)();/*函数指针说明*/f=fun;/*f指向fun

11、函数*/,三、动态内存分配函数简介,动态内存分配 在前面的程序设计中,存在一个问题,就是在编写程序时,因为无法确定要处理数据的规模,如字符串的长度、数值数据的个数等,为保证在数据规模足够大时也能进行处理,在定义变量时就为它说明一个特别大的空间,而在实际运行时,可能只需要这空间的很小一部分,也有可能给出的空间还不够大。这对内存资源利用和程序设计都是不利的。我们希望,计算机能按需分配内存,在运行时需要多大的空间就分配多大的空间,这样就能完全解决上面提到的问题。上面提出的问题,实际上是计算机内存的动态管理问题。C语言的动态内存管理函数,实现了动态内存管理。,三、动态内存分配函数简介,动态内存管理函数

12、 malloc()函数 其函数原型为:void*malloc(unsigned int size);其功能是:分配一块长度为size字节的连续空间,并将该空间的首地址作为函数的返回值。如果函数没有成功执行,返回值为空指针(NULL或0)。由于返回的指针的基类型为void,应该通过显式类型转换后才能存入其他基类型的指针变量中,否则会有警告提示。例如:int*p;p=(int*)malloc(sizeof(int);,三、动态内存分配函数简介,动态内存管理函数 2free()函数其函数原型为:void free(void*block);其功能是:释放以前分配给指针变量block的动态空间,但指针变

13、量block不会自动变成空指针。,三、动态内存分配函数简介,动态内存管理函数 3.calloc()函数 其函数原型为:void*calloc(unsigned n,unsigned size);其功能是:以size为单位大小共分配n*size个字节的连续空间,并将该空间的首地址作为函数的返回值。如果函数没有成功执行,返回值为空指针(NULL或0)。该函数比malloc函数方便之处在于,当动态分配数组空间时,malloc函数必须手工计算出数组的总字节数,而calloc函数不用计算。例如:int*p;p=(int*)calloc(10,sizeof(int);,指针和函数-小结,1指针作为函数的参

14、数时,在函数间传递的是变量的地址。2简单指针变量作函数参数,是指针作函数参数中最基本的内容,它的作用是实现一个简单变量的地址在函数中的传递。3数组名是数组的地址,与指针具有一些相同的性质,用数组指针作函数参数和用数组名作函数参数有很多相同之处。4指针数组的元素是指针变量,用指针数组可以方便地实现对一组字符串的处理。用指针数组作函数参数,可以实现多字符串处理的通用函数。指针数组的一个重要应用是作为main()函数的形参。,指针和函数-小结,5字符串指针作函数的参数与数组指针作函数参数没有本质的区别,函数间传递的都是地址值,所不同的仅是指针指向对象的类型不同而已。6函数返回值是指针类型的函数称为指针函数,使用指针函数可以获得更多的处理结果。需要特别特别注意的是,对于指针函数,用return返回的值必须是一个指针值。7动态内存管理的目的是为了实现动态存储。指针类型函数malloc()和calloc()用于获取一段可用内存,函数值为内存段的首地址,free()函数用于释放不再使用的内存段,这些函数在链表操作中有广泛应用。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号