1 / 13
文档名称:

C语言第十六讲(指针与函数).doc

格式:doc   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C语言第十六讲(指针与函数).doc

上传人:fy3986758 2016/2/29 文件大小:0 KB

下载得到文件列表

C语言第十六讲(指针与函数).doc

文档介绍

文档介绍:。。。。(一)导课在C语言函数调用中,参数传递可以是一般变量的传递,也可以是地址的传递(指针)。(二)课程要点一、指针变量作为函数的参数使用指针类型做函数的参数,实际向函数传递的是变量的地址。【例1】定义一个函数,用指针变量作参数实现两个数据的交换。#include<>voidmain(){voidswap(int*pa,int*pb);inta,b;a=15;b=20;printf("beforeswapa=%d,b=%d\n",a,b);swap(&a,&b);printf("afterswapa=%d,b=%d\n",a,b);}voidswap(int*pa,int*pb){intt;t=*pa;*pa=*pb;*pb=t;}其数据交换的变化过程如下图所示:思考:将上面swap函数作以下修改,a,b的值是否发生了交换?voidswap(int*pa,int*pb){int*t;t=pa;pa=pb;pb=t;}程序运行结果:beforeswapa=15,b=20afterswapa=20,b=15程序运行结果:beforeswapa=15,b=20afterswapa=15,b=20分析:如下图papbpapb交换前交换后由图所知,交换后只是指针pa、pb的指向发生了变化,而a、b值并没有改变。【例2】通过定义的函数,将数组a中所有数据按相反顺序存储。#include<>voidre(int*p,intn){int*q,t;q=p+n-1;while(p<q){t=*p;*p=*q;*q=t;&a15&b20&b15&a20tp++;q--;}}voidmain(){inta[10],j,*r;for(j=0;j<10;j++)scanf("%d",&a[j]);for(j=0;j<10;j++)printf("%d\t",a[j]);printf("\n");re(a,10);for(r=a;r<a+10;r++)printf("%d\t",*r);printf("\n");}二、返回指针值的函数1、返回指针值的函数的定义形式:类型名*函数名(形参表){函数体}说明:“类型名”表示返回的指针所指向的数据类型,“*”表示定义的函数是一个返回指针值的函数。例如:int*min(intx,inty){int*p;……return(p);}【例3】编写函数完成:在字符串中查找一个指定的字符,并将该字符的地址返回到调用函数。如果字符被查找到,请在调用函数中输出该字符及该字符起的字符串。#include<>char*ch(char*str,charst){while(*str!=st&&*str!='\0')str++;if(*str!='\0')return(str);}voidmain(){char*p,*q,a[100],c;gets(a);p=a;c=getchar();q=ch(p,c);printf("%c\n",*q);printf("%s\n",q);}三、指向函数的指针变量一个C语言函数在内存中占用一段连续的存储空间。在编译函数时,函数被分配给一个入口地址,这个入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。把指向函数的指针变量称为“函数指针变量”,函数指针变量的1、定义形式:数据类型(*指针变量名)(函数参数表列);说明:“数据类型”是指函数返回值的类型,“(*指针变量名)()”表示定义一个指向函数的指针变量,它不是固定指向哪一个函数的,而只是表示定义了这样一个类型的变量,它是专门用来存放函数的入口地址。例如:int(*p)(int,int);表示p是一个指向函数首地址的指针变量,该函数的返回值(函数值)是整型的。【例4】编写程序实现:用函数指针变量调用“输入n个数,求其中的最小数”的函数。#include<>intmin(intn){inti,x,m;printf("input%dnumbers:",n);scanf("%d",&x);m=x;for(i=1;i<n;i++){scanf("%d",&x);if(x<m)m=x;}return(m);}voidmain(){int(*p)();intn,a;p=min;printf("inputn=?");scanf("%d",&n);a=(*p)(n);printf("theminnumberis:%d\n",a);}【例5