#include <stdio.h>
// 定义函数,通过二级指针找到对应的整型变量,并将其值翻倍
void modifyValue(int **ptr) {
if (ptr != NULL && *ptr != NULL) {
**ptr = **ptr * 2;
}
}
int main() {
int value = 5;
int *ptr = &value;
// 定义函数指针,指向modifyValue函数
void (*funcPtr)(int **) = modifyValue;
// 通过函数指针调用modifyValue函数
funcPtr(&ptr);
printf("翻倍后的值: %d\n", value);
return 0;
}
多级指针、函数指针与变量值类型之间复杂的关联关系和作用原理
- 多级指针:
- 在
int **ptr
中,ptr
是一个二级指针。二级指针指向的是一个一级指针,而这个一级指针又指向一个具体的变量(在本题中是 int
类型变量 value
)。
- 通过
**ptr
这种形式,我们可以间接访问并修改 value
的值。例如在 modifyValue
函数中,**ptr = **ptr * 2;
这行代码,首先通过 *ptr
找到指向 value
的一级指针,然后再通过 **ptr
找到 value
本身,并对其值进行翻倍操作。
- 函数指针:
void (*funcPtr)(int **)
定义了一个函数指针 funcPtr
,它指向一个返回值为 void
,参数为 int **
的函数。这里 funcPtr
指向了 modifyValue
函数。
- 通过函数指针
funcPtr
调用 modifyValue
函数,如 funcPtr(&ptr);
,和直接调用 modifyValue(&ptr);
效果是一样的。函数指针提供了一种灵活的调用函数的方式,在一些情况下(如回调函数等场景)非常有用。
- 变量值类型:
- 变量
value
是 int
类型,它存储一个整数值。ptr
是 int *
类型,它存储的是 value
的地址。而 modifyValue
函数的参数 int **
类型,是为了能够通过二级指针找到 ptr
,进而找到 value
并修改其值。
- 函数指针
funcPtr
指向 modifyValue
函数,其参数类型和返回值类型必须与 modifyValue
函数一致,这样才能正确地通过函数指针调用 modifyValue
函数来操作 int
类型变量 value
。