写法
void (*func)(int value);
使用方式
下面的四种方式都是一样的效果,都可以输出value = 10
#include <stdio.h>
void (*func)(int value);
static void myFunc(int value) {
printf("myFunc value: %d\n", value);
}
static void test01() {
func = myFunc;
func(10);
}
static void test02() {
func = &myFunc;
func(10);
}
static void test03() {
func = myFunc;
(*func)(10);
}
static void test04() {
func = &myFunc;
(*func)(10);
}
int main(int argc, char const *argv[]) {
test01();
test02();
test03();
test04();
return 0;
}
myFunc和&myFunc、func和(*func)
#include <stdio.h>
void (*func)(int value);
static void myFunc(int value) {
printf("myFunc value: %d\n", value);
}
static void test01() {
func = myFunc;
printf("myFunc: %p, &myFunc: %p\n", myFunc, &myFunc);
printf("func: %p, (*func): %p\n", func, (*func));
}
int main(int argc, char const *argv[]) {
test01();
return 0;
}
输出结果为:
myFunc: 0x558092c1e149
&myFunc: 0x558092c1e149
func: 0x558092c1e149
(*func): 0x558092c1e149
从地址输出结果来看,四者都是对应同一个地址