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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

指针与函数

1.掌握指针变量为参数在调用函数和被调用函数之间的数据传递。

2.掌握函数返回地址值的方法。

3.掌握指向函数的指针及其运算。

4.能熟练运用指针变量完成C程序的编写。

1. 指针变量作为参数时实现数据传递

2.指向函数的指针及运算

3.函数返回地址值的方法

(一)导课

在C语言函数调用中,参数传递可以是一般变量的传递,也可以是地址的传递(指针)。

(二)课程要点

一、指针变量作为函数的参数

使用指针类型做函数的参数,实际向函数传递的是变量的地址。【例1】定义一个函数,用指针变量作参数实现两个数据的交换。

#include

void main()

{ void swap(int *pa,int *pb);

int a,b;

a=15;b=20;

printf("before swap a=%d,b=%d\n",a,b);

swap(&a,&b);

printf("after swap a=%d,b=%d\n",a,b);

}

void swap(int *pa,int *pb)

{ int t; t=*pa; *pa=*pb; *pb=t;

}

其数据交换的变化过程如下图所示:

思考:将上面swap 函数作以下修改,a,b 的值是否发生了交换?

void swap(int *pa,int *pb)

{ int *t;

t=pa; pa=pb;

pb=t; }

程序运行结果:

before swap a=15,b=20 after swap a=20,b=15

程序运行结果: before swap a=15,b=20

after swap a=15,b=20

分析:如下图 pa pb pa pb

交换前 交换后

由图所知,交换后只是指针pa 、pb 的指向发生了变化,而a 、b

值并没有改变。

【例2】通过定义的函数,将数组a 中所有数据按相反顺序存储。

#include

void re(int *p,int n)

{ int *q,t;

q=p+n-1;

while(p

{ t=*p;

*p=*q;

*q=t;

&a 15&b 20&b 15&a 20

t

p++;

q--;

}

}

void main()

{ int a[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

printf("%d\t",*r);

printf("\n");

}

二、返回指针值的函数

1、返回指针值的函数的定义形式:

类型名 *函数名(形参表)

{函数体}

说明:“类型名”表示返回的指针所指向的数据类型,“*”表示定义的函数是一个返回指针值的函数。

例如:int *min(int x,int y)

{ int *p;

……

return (p);

}

【例3】编写函数完成:在字符串中查找一个指定的字符,并将该字符的地址返回到调用函数。如果字符被查找到,请在调用函数中输出该字符及该字符起的字符串。

#include

char *ch(char *str,char st)

{

while(*str!=st&&*str!='\0')

str++;

if(*str!='\0')

return (str); }

void main()

{ 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

int min(int n)

{ int i,x,m;

printf("input %d numbers:",n); scanf("%d",&x);

m=x;

for(i=1;i

{ scanf("%d",&x);

if(x

m=x;

}

return(m);

}

void main()

{ int (*p)();

相关文档
最新文档