c语言函数指针和指针函数的区别及代码示例
c语言函数指针和指针函数的区别及代码示例
在C或C++中,函数指针和指针函数是两个容易混淆但本质不同的概念。理解它们的区别对于深入掌握C/C++的指针和函数特性至关重要。
1. 函数指针
定义:函数指针是指向函数的指针。它存储了函数的地址,通过它可以调用该函数。
语法:
返回类型 (*指针变量名)(参数类型列表);
示例:
#include <stdio.h>
void printHello() {
printf("Hello, World!\n");
}
int main() {
// 声明一个函数指针,指向没有参数、返回类型为void的函数
void (*funcPtr)();
// 将函数printHello的地址赋给函数指针
funcPtr = printHello;
// 通过函数指针调用函数
(*funcPtr)(); // 调用printHello
// 在C中,也可以省略解引用操作符,直接写 funcPtr();
funcPtr();
return 0;
}
2. 指针函数
定义:指针函数是返回指针的函数。它和普通函数一样,有自己的参数和返回类型,只不过这个返回类型是某个类型的指针。
语法:
返回类型* 函数名(参数类型列表);
注意:这里的关键是理解整个返回类型*
作为函数的返回类型,而不是将返回类型
和*
分开来看。
示例:
#include <stdio.h>
#include <stdlib.h>
// 返回一个指向int的指针
int* createArray(int size) {
// 分配一个整型数组
int* arr = (int*)malloc(size * sizeof(int));
// 初始化数组(这里简单处理,只设置第一个元素)
if (arr != NULL) {
arr[0] = 10;
}
return arr; // 返回指向数组的指针
}
int main() {
// 调用指针函数
int* ptr = createArray(5);
// 使用返回的指针
if (ptr != NULL) {
printf("%d\n", ptr[0]); // 输出 10
free(ptr); // 释放分配的内存
}
return 0;
}
总结
- 函数指针:指向函数的指针,用于调用函数。
- 指针函数:返回指针的函数,返回的指针可以指向任何数据类型,包括数组、结构体等。
通过这两个概念,C/C++程序员可以实现更灵活、更强大的代码结构和数据处理方式。