函数指针(Function Pointer)
概念:函数指针是一种特殊的指针,它指向一个函数,允许你将函数作为参数传递给另一个函数,或者在程序的其他部分通过指针调用函数。
声明示例:
void myFunction(void) {
printf("Hello, World!\n");
}
// 声明一个函数指针
void (*funcPtr)(void);
初始化和使用示例:
funcPtr = myFunction; // 将函数指针指向myFunction函数
funcPtr(); // 通过函数指针调用函数
应用示例:使用函数指针调用不同的函数,基于用户输入选择。
#include <stdio.h>
void func1(void) {
printf("Function 1 called.\n");
}
void func2(void) {
printf("Function 2 called.\n");
}
int main() {
void (*functions[])(void) = {func1, func2};
int choice;
printf("Enter 0 for func1 or 1 for func2: ");
scanf("%d", &choice);
if (choice >= 0 && choice < sizeof(functions) / sizeof(functions[0])) {
(*functions[choice])(); // 通过函数指针数组调用函数
} else {
printf("Invalid choice.\n");
}
return 0;
}
指针函数(Pointer Function)
概念:指针函数是一种返回指针的函数,它允许函数返回一个地址,这个地址可以指向一个变量、数组或其他数据结构。
声明示例:
int *myPointerFunction(void) {
static int value = 42;
return &value;
}
使用示例:
int *ptr = myPointerFunction(); // 调用指针函数并获取返回的指针
printf("%d\n", *ptr); // 使用返回的指针
应用示例:使用指针函数返回字符串的地址,并在其他函数中使用这个地址。
#include <stdio.h>
char *getString(void) {
static char str[] = "Hello, World!";
return str;
}
void printString(char *str) {
printf("%s\n", str);
}
int main() {
char *strPtr = getString();
printString(strPtr); // 使用指针函数返回的指针
return 0;
}
区别总结
函数指针 是一种指针类型,它指向一个函数,可以被用来存储函数的地址,并通过这个地址调用函数。它们在回调函数、事件处理和多态性实现中非常有用。 指针函数 是一种函数类型,它返回一个指针,这个指针可以指向一个变量、数组或其他数据结构。它们常用于返回动态分配的内存地址或静态数据的地址。