函数指针(Function Pointers)和指针函数(Functions Returning Pointers)是两个不同的概念,但它们都与指针有关。
- 函数指针:是一个变量,它的值是一个函数的地址。你可以通过这个指针来调用函数。
- 指针函数(或称为返回指针的函数):是一个函数,它的返回值是一个指针。
- 函数指针通常用于回调函数(callback functions)、函数表(function tables)、信号处理等场景。
- 指针函数通常用于动态内存分配、创建数据结构(如链表节点)、返回多个值等场景。
函数指针(指向函数的指针):函数指针是指一个指针,它指向一个函数。在声明函数指针时,你需要指定该函数返回的类型以及它的参数类型。函数指针的声明通常看起来像这样:
pointerFunction
是一个函数,它接受一个 int
类型的参数 size
,并返回一个指向 int
的指针。
指针函数(返回指针的函数):指针函数是指一个函数,其返回类型是一个指针。它的声明通常看起来像这样:
functionPointer
是一个函数指针,它指向一个接受 int
并返回 int
的函数。在 main
函数中,我们将 doubleValue
函数的地址赋值给 functionPointer
,然后通过 functionPointer
调用该函数。
注意在声明函数指针时,(*functionPointer)
周围的括号是必要的,因为 *
运算符的优先级低于 ()
。如果你省略了括号,编译器会将其解析为一个返回函数指针的函数,而不是一个指向函数的指针。
总结来说,指针函数是返回指针的函数,而函数指针是指向函数的指针。
联系:
- 都涉及指针:两者都与指针有关,但它们分别表示不同类型的指针。
- 都可以作为参数:函数指针和指针函数都可以作为其他函数的参数。但它们的含义和用途不同。
- 在某些情况下可以互换:虽然它们是不同的概念,但在某些特定的编程场景中,你可能需要编写一个返回函数指针的函数(即,一个返回函数指针的指针函数)。这种高级用法在C语言中相对少见,但在某些框架和库中可能会遇到。
函数指针示例:
指针函数示例:
在这段代码中,createIntArray
函数是一个指针函数,它接受一个整数size
作为参数,并返回一个指向新分配的整数数组的指针。在main
函数中,我们调用createIntArray
函数来创建一个数组,并使用返回的指针来操作该数组。最后,我们使用free
函数来释放之前分配的内存。
请注意,在实际编程中,应该始终检查动态内存分配是否成功,并在不再需要时释放内存,以避免内存泄漏。在这个例子中,如果malloc
调用失败,createIntArray
函数将输出错误消息并退出程序。