指针和函数课件_第1页
指针和函数课件_第2页
指针和函数课件_第3页
指针和函数课件_第4页
指针和函数课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、。了解动态内存管理的概念及意义,熟悉动态内存管理函数。一、指针作为函数的参数 指针可以指向任何类型的数据,因此通过指针能够实现任何类型的数据处理。函数使用指针参数,就可以使函数处理各种类型的数据。与基本数据类型的变量作函数参数的最大区别是,在函数间传递的不是变量的数值,而是变量的地址,这样可以通过函数直接处理实参指针指向的数据。 一、指针作为函数的参数 指向数组的指针作函数的参数 例12-2 求一维数组的最大元素值。我们用三个函数实现这个程序: 用输入函数input()建立数组; 用max_a()函数求最大值; 用main()函数作为主调函数。为了方便对函数编写,先假定数组长度为n,指针p指向

3、该数组。一、指针作为函数的参数 void input(int *p,int n)int i; for(i=0;in;i+) scanf(%d,p+i); return; int max_a(int *p,int n) int i,max=*p; for(i=1;imax)max=*(p+i); return(max);main() int a10; input(a,10); printf(MAX=%dn,max_a(a,10);一、指针作为函数的参数 字符串指针作函数的参数 #include stdio.hmain()void copy_s(char *,char *); char a20,b

4、30; 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,j; for(i=1;in;i+) for(j=0;j0) temp= string j; string j=

5、 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; string_sort(days,7);

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

7、,等等。 一、指针作为函数的参数 例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将一组字符串中长度最大的找出来,并输出这个字符串。char *max_

8、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(

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

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

11、igned size);其功能是:以size为单位大小共分配n*size个字节的连续空间,并将该空间的首地址作为函数的返回值。如果函数没有成功执行,返回值为空指针(NULL或0)。该函数比malloc函数方便之处在于,当动态分配数组空间时,malloc函数必须手工计算出数组的总字节数,而calloc函数不用计算。例如:int *p;p=(int *)calloc(10,sizeof(int); 指针和函数-小结1指针作为函数的参数时,在函数间传递的是变量的地址。2简单指针变量作函数参数,是指针作函数参数中最基本的内容,它的作用是实现一个简单变量的地址在函数中的传递。3数组名是数组的地址,与指针具有一些相同的性质,用数组指针作函数参数和用数组名作函数参数有很多相同之处。4指针数组的元素是指针变量,用指针数组可以方便地实现对一组字符串的处理。用指针数组作函数参数,可以实现多字符串处理的通用函数。指针数组的一个重要应用是作为main()函数的形参。指针和函数-小结5字符串指针作函数的参数与数组指针作函数参数没有本质的区别,函数间传递的都是地址值,所不同的仅是指针指向对象的类型不同

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论