第六次课大纲

   在学习函数定义时,大家知道一个函数分为函数头和函数体,其中函数头包括返回值、函数名和参数表,那指针与函数是什么关系?

void sum(int a,int b);//void 是返回值,sum是函数名,int a和int b是函数参数

指针可替代函数头中的每一部分,也就是指针与函数有三重关系:指针作为函数参数,指针作为函数返回值,指向函数的指针。

  一、指针作为函数参数

  在第三节课里说过,指针的主要用途就是作为函数参数,当函数参数为普通变量时,函数参数的传递是值传递,而当函数参数是指针时,依然是值传递,只是这时的值是地址,通过地址可以访问到函数外的变量的值,有些书上也称指针作为函数参数为双向传递。具体例子可参考第三节课大纲。

  二、指针作为函数返回值

  函数的返回值可以是整形的,也可以是double等,那么也可以是指针类型的。如果函数返回一个int类型数据,那么返回值写为int就可以,相应的如果返回一个int类型的指针,返回值则是int *类型。

int i;
int sum(int a);    返回整型类型

int *p;
int *sum(int a);   返回指针类型

  举例说明,以指针返回值的形式输出两个数中比较大的值,通过整形数据可以将最大值返回给main,也可以通过指针返回回来:

 1 #include<stdio.h> 
 2 int *max(int *p1,int *p2){
 3     int *r;
 4     if(*p1>*p2) r=p1;
 5     else r=p2;
 6     
 7     return r;
 8 }
 9 
10 int main(){
11     int a,b,*p;
12     printf("input a and b:
");
13     scanf("%d,%d",&a,&b);
14     p=max(&a,&b);
15     printf("max=%d",*p);
16     
17     return 0;
18     
19 }
View Code

  三、函数指针

  编辑器对程序进行编译时,会为每个函数分配一片连续的内存空间,例如下图的main函数和swap函数,函数所在内存空间的首地址就是函数的入口地址:

那么这个入口地址也可以存放在一个指针类型的变量中,也就是使用一个指针变量指向该函数。然后像数组一样,该指针变量代替函数名来代替这个函数,指向函数的指针称为函数指针。函数指针的定义方式如下:

类型说明符 (*变量名)()
例如:int (*p)(char a);  //定义了一个指向函数的指针变量p,函数的返回值是int,函数参数是char a。  

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 由于外出培训,找其他老师代课,第六次课主要讲授了指针和二维数组、作为函数返回值的指针。指向函数的指针作为自学内容。

原文地址:https://www.cnblogs.com/c-programing-language/p/6545430.html