您的位置:首页 > 编程语言 > C语言/C++

C语言函数指针应用例题详解

2014-07-09 21:38 381 查看
1.函数指针:
   找出两个数的最大值:
int maxValue(int a,int b)  //返回最大值的函数
{
return a>b?a:b;    
}
int main()
{
int a = 3;
int b = 5;
int (*p)(int a,int b);  //定义一个结构体指针,它的参数类型要和你指向的函数的参数类型保持一致。(注意定义的方法)
p = maxValue;     //函数的内存在代码区,函数名代表函数的首地址,所以可以让你定义的函数指针指向它的首地址。
int max = p(a,b);   //调用该函数指针。(注意调用的方法,初学一般都是看过了就觉得记住了,过一会就忘了)。
printf(“%d”,max);
}
    对于本题也可以同时用p指向数个函数,eg:int minValue(int a,int b)等。
函数指针的优点:(1)可以调用函数(只知道类型和功能,不用知道实现的内容)(2)可以重复指向调用(3)它是为学习面向对象语言打基础的,一定要搞明白
2.回调函数:
   对于回调函数其实和嵌套函数有相似之处。不同点只是在于回调函数定义了一个函数指针指向了所要引用的函数,并且函数指针作为了形参。这是第一点比较难理解的 地方。第二点就是在于函数要调用时的用法,初学者一定要注意这个地方。我们用例子来看:
   题目:为80分以上的同学名字后面拼接上“三好学生”
  #include <stdio.h>

  #include <stdlib.h>

  #include <string.h>

  typedefstruct student      //定义一个结构体存放学生信息

  {

   char name[20];

  int score;

   int age;

  }Stu;

  void pinjie(char name[])     //这是被调用的函数,被函数指针所指向的函数。它是一个工程的具体实现。

  {

  strcat(name, "三好学生");

  }

  void f1(Stu stu[],int n,void (*p)(char name[])) //结构体数组,数组长度,函数指针作为形参。(注意函数指针的定义,组成元素和目的)。

  {

   for (int i = 0; i < 5; i++) {

  if (stu[i].score>80) {

   p(stu[i].name);          //调用函数(注意参数的传递)。

  }

  }

  }

  int main(int argc, constchar * argv[])

  {

  Stu stu[5] = {

   {"zhangdsan",69,25},

  {"lisi",86,26},

  {"wangwu",67,21},

   {"maliu",78,20},

   {"tangqi",63,27}

  };

   f1(stu,5,pinjie);            //调用实现函数(注意参数的传递和调用方式,如果函数是有返回值的就要用一个跟函数类型一样的变量来接收它)。

   for (int i = 0; i < 5; i++) {

   printf("%8s%8d%8d\n",stu[i].name,stu[i].score,stu[i].age);

  }

   return0;

   }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: