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 %sn", 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;}