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;
}
找出两个数的最大值:
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;
}
相关文章推荐
- C/C++指针指针应用详解(教程)
- C语言函数名与函数指针详解
- C语言函数名与函数指针详解
- 分治技巧在高级数据结构中的应用——cdq分治(一)&&bzoj3262例题详解
- 关于指针与数组的相关例题详解
- C语言函数名与函数指针详解
- Day7-指针的基础详解、二维数组、数组的几种应用、字符串的简单应用.pages
- C语言函数名与函数指针详解
- C语言函数指针简单应用
- C语言函数名与函数指针详解
- C语言函数指针详解
- C语言函数名与函数指针详解
- 关于快慢指针的若干应用详解
- C++中指针与引用区别【例题详解】
- C语言函数名与函数指针详解
- C语言函数名与函数指针详解
- c语言函数指针和应用
- C语言函数名与函数指针详解
- 指针例题详解
- C语言函数名与函数指针详解