指针函数本质是一个函数,只是函数的返回值是指针类型
函数指针本质是一个指针,只是这个指针指向的是一个函数
- 指针函数
函数有很多类型的返回值,例如
short funcA(参数列表) // 表示该函数返回值是一个short类型
void funcA(参数列表) // 表示该函数返回值是一个void类型,也就是没有实际返回值
char* funcA(参数列表) // 表示该函数返回值是一个char类型指针
语法:
数据类型* 函数名(参数列表);
示例:
#include <stdio.h>
// 定义一个指针函数,返回一个指向char的指针char* step1() {
static char* data = (char*)"I am step1.\n";
return data;
}
char* step1() {
static char* data = (char*)"I am step1.\n";
return data;
}
char* step2() {
static char* data = (char*)"I am step2.\n";
return data;
}
int main() {
char* ptr = NULL;
ptr = step1(); // 获取step1函数返回值
printf("Value: %s\n", ptr);
ptr = step2(); // 获取step1函数返回值
printf("Value: %s\n", ptr);
return 0;
}
输出
Value: I am step1.
Value: I am step2.
在上面的例子中,函数的返回值是一个字符串,常规类型的返回值是无法满足的,通过指针就很容易实现。
- 函数指针
指针是内存的一个地址,这个地址可以存变量,也可以存储的是函数,
当指针指向的是一个函数的首地址,该指针就可以叫做函数指针。
语法:
返回类型 (*指针变量名)(参数列表);
示例:
#include <stdio.h>// 定义一个普通函数
int add(int a, int b) {
return a + b;
}
int main() {
// 定义一个函数指针,指向返回值为 int,参数为两个 int 的函数
int (*funcPtr)(int, int);
// 将函数指针指向 add 函数
funcPtr = &add;
// 通过函数指针调用函数
int result = funcPtr(3, 5); // 等价于 add(3, 5)
printf("Result: %d\n", result); // 输出:Result: 8
return 0;
}
上面的例子中可以看到:
funcPtr是一个指向函数的指针,该函数的返回值是int,有两个int类型的参数
funcPtr = &add的目的就是将指针funcPtr指向add函数
指针函数 vs 函数指针
|
特性 |
指针函数 |
函数指针 |
|---|---|---|
|
定义 |
返回指针的函数,这个一个函数,函数的返回值是指针 |
指向函数的指针变量,这是一个指针, 需要指向一个对应的函数才能使用 |
|
语法 |
|
|
|
目的 |
作用是返回函数中某一参数的地址 |
作用是获取函数的地址 |
|
示例 |
|
|
5163

被折叠的 条评论
为什么被折叠?



