MST

星途 面试题库

面试题:C语言一维数组参数声明在复杂数据结构中的应用

设计一个C语言的数据结构,该结构包含一个一维数组和一些用于操作这个数组的函数指针。要求在初始化这个数据结构时,能够以不同的一维数组参数声明方式来传递数组。编写代码实现该数据结构的定义、初始化函数以及一个简单的测试函数,在测试函数中创建数据结构实例并调用其中一个函数指针操作数组。
45.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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;
}
  1. 定义函数指针类型ArrayOpFunc 定义了操作数组的函数指针类型,这些函数接受一个 int* 类型的数组指针和数组大小 int 作为参数,返回类型为 void
  2. 定义数据结构 ArrayContainer:包含一个 int* 类型的数组指针 array,用于存储数组数据;一个 int 类型的变量 size,表示数组的大小;以及一个 ArrayOpFunc 类型的函数指针 func,用于指向操作数组的函数。
  3. 实现初始化函数 initArrayContainer:为 containerarray 分配内存,将传入的数组 arr 的内容复制到新分配的内存中,并设置 sizefunc
  4. 实现测试函数 testArrayContainer:创建一个数组 arr1,通过 initArrayContainer 初始化 ArrayContainer 实例,并调用函数指针 func 来操作数组,最后释放分配的内存。
  5. main 函数中调用 testArrayContainer:启动测试流程。