MST

星途 面试题库

面试题:C++函数指针在数组与回调中的应用

假设有一个整数数组,编写一个函数,该函数接受一个函数指针作为参数,这个函数指针指向的函数用于对数组中的每个元素进行某种操作(例如乘以2)。在主函数中,定义该操作函数,并调用接受函数指针的函数来处理数组元素,最后输出处理后的数组。
13.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义对数组元素进行操作的函数
void multiplyByTwo(int *num) {
    *num *= 2;
}

// 接受函数指针的函数,对数组每个元素进行操作
void processArray(int arr[], int size, void (*operation)(int *)) {
    for (int i = 0; i < size; i++) {
        operation(&arr[i]);
    }
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);

    processArray(arr, size, multiplyByTwo);

    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}
#include <iostream>
#include <vector>

// 定义对数组元素进行操作的函数
void multiplyByTwo(int &num) {
    num *= 2;
}

// 接受函数指针的函数,对数组每个元素进行操作
void processArray(std::vector<int>& arr, void (*operation)(int&)) {
    for (auto& num : arr) {
        operation(num);
    }
}

int main() {
    std::vector<int> arr = {1, 2, 3, 4, 5};

    processArray(arr, multiplyByTwo);

    for (int num : arr) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}
def multiplyByTwo(num):
    return num * 2

def processArray(arr, operation):
    return list(map(operation, arr))

if __name__ == "__main__":
    arr = [1, 2, 3, 4, 5]
    result = processArray(arr, multiplyByTwo)
    print(result)

以上分别为C、C++、Python语言实现,通过函数指针或类似机制,对数组每个元素执行指定操作并输出结果。

  1. C语言
    • 定义multiplyByTwo函数对单个整数乘以2。
    • processArray函数接受数组、数组大小和函数指针,遍历数组调用指定函数。
    • main函数定义数组,调用processArray处理数组并输出。
  2. C++语言
    • multiplyByTwo函数对整数引用乘以2。
    • processArray函数接受std::vector和函数指针,使用范围遍历调用指定函数。
    • main函数定义std::vector,调用processArray处理并输出。
  3. Python语言
    • multiplyByTwo函数返回整数乘以2的结果。
    • processArray函数使用map函数对列表元素应用指定函数并返回新列表。
    • if __name__ == "__main__"块中定义列表,调用processArray处理并输出。