MST

星途 面试题库

面试题:C++中函数指针与指针函数区别之代码实现

请分别编写一个函数指针和指针函数的示例代码,并简要解释代码的含义,要求在代码中展示函数指针如何调用函数以及指针函数如何返回指针。
48.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

函数指针示例代码

#include <stdio.h>

// 定义一个普通函数
int add(int a, int b) {
    return a + b;
}

int main() {
    // 定义一个函数指针
    int (*funcPtr)(int, int); 
    // 让函数指针指向add函数
    funcPtr = add; 
    // 通过函数指针调用函数
    int result = funcPtr(3, 5); 
    printf("通过函数指针调用add函数的结果: %d\n", result);
    return 0;
}

在上述代码中:

  1. 首先定义了一个普通函数add,用于计算两个整数的和。
  2. 接着定义了一个函数指针funcPtr,它指向一个返回int类型,并且接受两个int类型参数的函数。
  3. 然后将funcPtr指向add函数。
  4. 最后通过funcPtr调用add函数,并输出结果。

指针函数示例代码

#include <stdio.h>
#include <stdlib.h>

// 定义一个指针函数,返回一个动态分配内存的int类型指针
int* createArray(int size) {
    int *arr = (int *)malloc(size * sizeof(int));
    if (arr == NULL) {
        return NULL;
    }
    for (int i = 0; i < size; i++) {
        arr[i] = i;
    }
    return arr;
}

int main() {
    int size = 5;
    // 调用指针函数
    int *resultArray = createArray(size); 
    if (resultArray != NULL) {
        printf("指针函数返回的数组内容: ");
        for (int i = 0; i < size; i++) {
            printf("%d ", resultArray[i]);
        }
        free(resultArray); // 释放动态分配的内存
    } else {
        printf("内存分配失败\n");
    }
    return 0;
}

在上述代码中:

  1. 定义了一个指针函数createArray,它接受一个整数参数size,用于动态分配一个大小为sizeint类型数组,并对数组元素进行初始化,最后返回这个数组的指针。
  2. main函数中调用createArray函数,获取返回的数组指针,并输出数组的内容,最后释放动态分配的内存以避免内存泄漏。