文档介绍:指针与函数量为参数在调用函数和被调用函数之间的数据传递。回地址值的方法。数的指针及其运算。指针变量完成C程序的编写。为参数时实现数据传递指针及运算址值的方法(一)导课在C语言函数调用中,参数传递可以是一般变量的传递,也可以是地址的传递(指针)。(二)课程要点一、指针变量作为函数的参数使用指针类型做函数的参数,实际向函数传递的是变量的地址。【例1】定义一个函数,用指针变量作参数实现两个数据的交换。#include<stdio.h>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;程序运行结果:before swapa=15,b=20afterswapa=20,b=15t=*pa;*pa=*pb;*pb=t;}其数据交换的变化过程如下图所示:思考:将上面swap函数作以下修改,a,b的值是否发生了交换?voidswap(int*pa,int*pb){int*t;程序运行结果:before swapa=15,b=20afterswapa=15,b=20t=pa;pa=pb;pb=t;}t分析:如下图papbpapb&a20&a&b15&a&b&a15&a20&a交换前交换后由图所知,交换后只是指针pa、pb的指向发生了变化,而a、b值并没有改变。【例2】通过定义的函数,将数组a中所有数据按相反顺序存储。#include<stdio.h>voidre(int*p,intn){int*q,t;q=p+n-1;while(p<q){t=*p;*p=*q;*q=t;p++;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<stdio.h>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<stdio.h>intmin(intn){inti,x,m;printf("input%dnumbers:",n);scanf("%d",&x);m=x;for(i=1;i<n;i+