#include <stdio.h>
#include <stdlib.h>
// 定义操作数组的函数指针类型
typedef void (*ArrayOpFunc)(int*, int);
// 定义数据结构
typedef struct {
int *array;
int size;
ArrayOpFunc func;
} ArrayContainer;
// 定义操作数组的函数示例:打印数组
void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 初始化数据结构的函数
void initArrayContainer(ArrayContainer *container, int *arr, int size, ArrayOpFunc func) {
container->array = (int*)malloc(size * sizeof(int));
if (container->array == NULL) {
fprintf(stderr, "Memory allocation failed\n");
exit(EXIT_FAILURE);
}
for (int i = 0; i < size; i++) {
container->array[i] = arr[i];
}
container->size = size;
container->func = func;
}
// 简单的测试函数
void testArrayContainer() {
int arr1[] = {1, 2, 3, 4, 5};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
ArrayContainer container;
initArrayContainer(&container, arr1, size1, printArray);
// 调用函数指针操作数组
container.func(container.array, container.size);
free(container.array);
}
int main() {
testArrayContainer();
return 0;
}
- 定义函数指针类型:
ArrayOpFunc
定义了操作数组的函数指针类型,这些函数接受一个 int*
类型的数组指针和数组大小 int
作为参数,返回类型为 void
。
- 定义数据结构
ArrayContainer
:包含一个 int*
类型的数组指针 array
,用于存储数组数据;一个 int
类型的变量 size
,表示数组的大小;以及一个 ArrayOpFunc
类型的函数指针 func
,用于指向操作数组的函数。
- 实现初始化函数
initArrayContainer
:为 container
的 array
分配内存,将传入的数组 arr
的内容复制到新分配的内存中,并设置 size
和 func
。
- 实现测试函数
testArrayContainer
:创建一个数组 arr1
,通过 initArrayContainer
初始化 ArrayContainer
实例,并调用函数指针 func
来操作数组,最后释放分配的内存。
- 在
main
函数中调用 testArrayContainer
:启动测试流程。