函数指针与指针函数
最近接触到了这两个概念,有一点混乱,于是搜集资料整理了一下,用两个简单的例子来解释。
区别
- 函数指针:是一个变量,它存储一个函数的地址,可以通过这个变量调用指针所指向的函数。
- 指针函数:是一个函数,它返回一个指针,该指针指向某种数据类型(如数组、结构体等)。
函数指针
函数指针是指向函数的指针。它可以用来调用指针所指向的函数,甚至可以在运行时动态地决定要调用哪个函数。
-
定义和使用函数指针的一般步骤如下:
-
声明一个函数指针:
语法:返回类型 (*指针变量名)(参数列表); -
给函数指针赋值:
语法:指针变量名 = 函数名; -
通过函数指针调用函数:
语法:(*指针变量名)(参数列表);
-
-
使用示例
#include <stdio.h>
// 定义一个函数
void printMessage(const char* message) {
printf("%s\n", message);
}
int main() {
// 声明一个函数指针
void (*funcPtr)(const char*);
// 将函数指针指向函数
funcPtr = printMessage;
// 通过函数指针调用函数
funcPtr("Hello, Function Pointer!");
return 0;
}
- 运行结果
指针函数
指针函数是返回指针的函数。它们的主要用途是返回一个指针,例如一个指向数组或结构体的指针。
-
定义和使用指针函数的语法如下:
- 声明一个返回指针的函数:
语法:返回类型 *函数名(参数列表);
- 声明一个返回指针的函数:
-
使用示例
#include <stdio.h>
// 定义一个返回指针的函数
int* getArray() {
static int arr[] = {1, 2, 3, 4, 5};
return arr;
}
int main() {
// 调用指针函数并接收返回的指针
int* ptr = getArray();
// 通过指针访问数组元素
for (int i = 0; i < 5; ++i) {
printf("%d ", ptr[i]);
}
return 0;
}
- 运行结果