指针函数和函数指针

指针函数本质是一个函数,只是函数的返回值是指针类型

函数指针本质是一个指针,只是这个指针指向的是一个函数


  1. 指针函数

函数有很多类型的返回值,例如

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.

在上面的例子中,函数的返回值是一个字符串,常规类型的返回值是无法满足的,通过指针就很容易实现。


  1. 函数指针

指针是内存的一个地址,这个地址可以存变量,也可以存储的是函数,

当指针指向的是一个函数的首地址,该指针就可以叫做函数指针。

语法:
返回类型 (*指针变量名)(参数列表);
示例:
#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 函数指针

特性

指针函数

函数指针

定义

返回指针的函数,这个一个函数,函数的返回值是指针

指向函数的指针变量,这是一个指针

需要指向一个对应的函数才能使用

语法

数据类型* 函数名(参数列表);

返回类型 (*指针变量名)(参数列表);

目的

作用是返回函数中某一参数的地址

作用是获取函数的地址

示例

int* func();

int (*funcPtr)(int, int);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值