/*
Design Model:设计模式
Function:使用函数指针列表搭建程序框架
*/
#include <stdio.h>
#include <stdlib.h>
int hello(int i);
void hey(int i);
int someother(void);
void defaultFunc(void);
typedef void(*PTRFUN)(void);
PTRFUN pFun;
/*************
主函数
*************/
int main(void)
{
// 函数指针调用方式
int (*p)(int); // 定义需要调用的函数指针结构类型
p = hello; // 函数指针赋值
int n = 0;
(*p)(22); // 函数指针调用方式一
printf("*p reruen value=%d\n", n);
n = p(23); // 函数指针调用方式二
printf(" p reruen value=%d\n", n);
printf("*p=%d\n", *p);
printf(" p=%d\n", p);
// ----------------------------------------
// typedef 方法调用函数指针
// int FUN(void) OK
// void FUN(int) OK
// void FUN(void) OK
// 但是为什么void类型不行???
puts("\n");
pFun = defaultFunc;
pFun();
printf(" pFun reruen value=%d\n", n);
(*pFun)();
printf("*pFun reruen value=%d\n", n);
printf("*pFun=%d\n", *p);
printf(" pFun=%d\n", p);
exit(EXIT_SUCCESS);
}
/*****************************
子函数
*****************************/
int hello(int i)
{
printf("I know you are saying hello %d.\n", i);
return i + 3;
}
void hey(int i)
{
printf("hey~hey = %d.\n", i);
//return i;
}
int someother(void)
{
puts("some more out put.");
}
void defaultFunc(void)
{
puts("there is no function for this anyway.");
}
方法
int my_func(int a,int b){
printf("ret:%d\n", a + b);
return 0;
}
//1. 先定义函数类型,通过类型定义指针
void test01(){
typedef int(FUNC_TYPE)(int, int);
FUNC_TYPE* f = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
//2. 定义函数指针类型
void test02(){
typedef int(*FUNC_POINTER)(int, int);
FUNC_POINTER f = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
//3. 直接定义函数指针变量
void test03(){
int(*f)(int, int) = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
标签:20,int,void,调用函数,pFun,printf,函数指针,指针
From: https://www.cnblogs.com/starcos/p/16910161.html