MST
星途 面试题库

面试题:C语言指针数组与函数指针数组:错误预防

定义一个函数指针数组,每个函数指针指向一个接受两个`int`参数并返回`int`的函数。同时,定义一个`int`类型的指针数组。然后编写代码将指针数组的元素传递给函数指针数组中的某个函数进行处理。请指出在这个过程中可能出现的常见错误,并说明如何预防。
50.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

以下是使用C语言实现该需求的代码示例,以及可能出现的常见错误和预防方法:

代码示例

#include <stdio.h>

// 定义函数类型
typedef int (*FuncPtr)(int, int);

// 示例函数1
int add(int a, int b) {
    return a + b;
}

// 示例函数2
int subtract(int a, int b) {
    return a - b;
}

int main() {
    // 定义函数指针数组
    FuncPtr funcPtrArray[] = {add, subtract};

    // 定义int类型的指针数组
    int num1 = 10;
    int num2 = 5;
    int *intPtrArray[] = {&num1, &num2};

    // 将指针数组的元素传递给函数指针数组中的某个函数进行处理
    int result = funcPtrArray[0](*intPtrArray[0], *intPtrArray[1]);
    printf("结果: %d\n", result);

    return 0;
}

常见错误及预防方法

  1. 函数指针未初始化

    • 错误描述:使用未初始化的函数指针,可能导致程序崩溃。
    • 预防方法:在使用函数指针数组前,确保每个元素都被正确初始化,指向实际存在的函数。
  2. 访问越界

    • 错误描述:在访问函数指针数组或int指针数组时,索引超出了数组的有效范围。
    • 预防方法:在使用数组索引时,确保索引值在数组的有效范围内。可以使用sizeof操作符来计算数组的大小,避免手动指定索引值导致越界。
  3. 解引用空指针

    • 错误描述:如果int指针数组中的元素是NULL,解引用它会导致未定义行为。
    • 预防方法:在解引用指针之前,先检查指针是否为NULL
  4. 类型不匹配

    • 错误描述:如果函数指针的类型与实际调用的函数类型不匹配,可能导致未定义行为。
    • 预防方法:使用typedef定义函数指针类型,并确保所有函数指针的类型一致,同时实际调用的函数也与该类型匹配。