c/c++ 中数据结构跟指针真的是很强大
今天解释下 函数类型和函数指针类型
1.函数类型
在C语言中,函数也是一种类型,可以定义指向函数的指针。我们知道,指针变量的内存单元存放一个地址值,
而函数指针存放的就是函数的入口地址.
#include <stdio.h>
void say_hello(const char *str);
void (*fptr)(const char *);
int main(void)
{
void (*fptr)(const char *) = say_hello;
fptr("KingPlesk");
return 0;
}
void say_hello(const char *str)
{
printf("Hello %s\n", str);
}
首先要理解的是 void (*fptr)(const char *)
这是定义一个变量
例如 void *ptr 这个是一个函数指针变量,不要把这个void (*fptr)(const char *) 当作一个声明定义。
typedef 是一个类型声明的 关键字,
void say_hello(const char *str); 函数也是一种类型,那么就可以用typedef来声明
typedef void FUNC_HELLO_PTR(const char *str);
—————————————————————————
FUNC_HELLO_PTR 等于 void say_hello(const char *str); 声明
FUNC_HELLO_PTR *p = void (*fptr)(const char *str); 函数指针
看下我写的一个实例:演示函数指针和 函数类型声明
C++ Demo
#include <iostream>
void hello(void);//函数声明
typedef void FUNC_HELLO_PTR(void);//typedef函数类型
void (*hellotest)(void);//定义一个函数指针
int main(int argc, char *argv[])
{
//使用函数类型指针方式调用
FUNC_HELLO_PTR *t = hello;
t();
//直接使用函数指针调用
hellotest = hello;
hellotest();
return 0;
}
void hello(void){
std::cout<<"Test"<<std::endl;
}