1.函数指针
- 函数指针用来存放函数的地址,这个地址是一个函数的入口地址
- 函数名代表了函数的入口地址
- 函数指针变量说明的一般形式如下
<数据类型> (*<函数指针名称>)(<参数说明列表>);
#include <stdio.h>
// 声明一个函数,它接受两个整数并返回它们的和
int add(int a, int b) {
return a + b;
}
// 声明另一个函数,它接受两个整数并返回它们的差
int subtract(int a, int b) {
return a - b;
}
int main() {
// 声明一个函数指针,它指向接受两个int参数并返回int的函数
int (*operation)(int, int);
// 将函数指针指向add函数
operation = add;
printf("Result of add: %d\n", operation(5, 3)); // 输出:Result of add: 8
// 将函数指针指向subtract函数
operation = subtract;
printf("Result of subtract: %d\n", operation(5, 3)); // 输出:Result of subtract: 2
return 0;
}
2.指针函数
- 指针函数是指一个函数的返回值为地址量的函数
- 指针函数的定义的一般形式如下
<数据类型> * <函数名称> (<参数说明>)
{语句序列;}
- 返回值:全局变量的地址/static变量的地址/字符串常量的地址/堆的地址
#include <stdio.h>
#include <stdlib.h>
// 这是一个指针函数,它返回一个指向整数数组的指针
int* create_array(int size) {
// 动态分配一个整数数组
int* arr = (int*)malloc(size * sizeof(int));
if (arr == NULL) {
// 内存分配失败,返回NULL
printf("Memory allocation failed!\n");
exit(EXIT_FAILURE);
}
// 初始化数组元素
for (int i = 0; i < size; ++i) {
arr[i] = i * i; // 填充数组为平方数
}
// 返回指向数组的指针
return arr;
}
int main() {
// 调用指针函数,创建一个大小为5的整数数组
int* my_array = create_array(5);
// 检查内存是否成功分配
if (my_array != NULL) {
// 输出数组的内容
for (int i = 0; i < 5; ++i) {
printf("%d ", my_array[i]);
}
printf("\n");
// 释放动态分配的内存
free(my_array);
}
return 0;
}