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++程序员可以实现更灵活、更强大的代码结构和数据处理方式。