1)指向函数的指针变量
指针变量可以存储函数的地址,通过使用“&”操作符可以得到函数的地址。例如:
int add(int a, int b) {
return a + b;
}
int main() {
int (*fp)(int, int); // 声明一个函数指针fp
fp = &add; // 将fp指向add函数
int result = fp(1, 2); // 通过fp调用add函数
printf("%d\n", result); // 输出结果3
return 0;
}
在上面的例子中,我们声明了一个名为“fp”的函数指针,它指向一个带有两个整数参数并返回一个整数的函数。然后我们将“fp”指向了“add”函数,并通过“fp”调用该函数。
2)回调函数
回调函数是指在使用函数指针时,将一个函数作为参数传递给另一个函数,或者将一个函数作为另一个函数的返回值。例如:
void myfunc(int data, int (*callback)(int)) {
printf("Get data: %d\n", data);
int result = callback(data);
printf("Callback result: %d\n", result);
}
int add(int a) {
return a + 1;
}
int main() {
myfunc(100, add); // 将add函数作为回调函数传递给myfunc函数
return 0;
}
在上面的例子中,我们定义了一个名为“myfunc”的函数,它接受一个整数参数和一个回调函数。在“myfunc”函数内部,我们调用回调函数并传递参数,并输出回调函数的返回值。在“main”函数中,我们将“add”函数作为回调函数传递给“myfunc”函数。
3)函数指针数组
可以定义一个包含函数指针的数组,每个元素都是一个指向不同函数的指针。例如:
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
int (*fp[])(int, int) = {add, subtract}; // 定义一个函数指针数组fp,包含两个指向函数的指针
int result = fp[0](1, 2); // 通过fp数组的第一个元素调用add函数
printf("%d\n", result); // 输出结果3
result = fp[1](3, 4); // 通过fp数组的第二个元素调用subtract函数
printf("%d\n", result); // 输出结果1
return 0;
}
在上面的例子中,我们定义了一个名为“fp”的函数指针数组,它包含两个指向不同函数的指针。我们通过访问“fp”数组的不同元素来调用不同的函数,并输出相应的结果