你能分得清函数指针和指针函数么?

文摘   2024-09-03 09:02   内蒙古  

函数指针(Function Pointer)

概念:函数指针是一种特殊的指针,它指向一个函数,允许你将函数作为参数传递给另一个函数,或者在程序的其他部分通过指针调用函数。

声明示例:

void myFunction(void) {
    printf("Hello, World!\n");
}

// 声明一个函数指针
void (*funcPtr)(void);

初始化和使用示例:

funcPtr = myFunction; // 将函数指针指向myFunction函数
funcPtr(); // 通过函数指针调用函数

应用示例:使用函数指针调用不同的函数,基于用户输入选择。

#include <stdio.h>

void func1(void) {
    printf("Function 1 called.\n");
}

void func2(void) {
    printf("Function 2 called.\n");
}

int main() {
    void (*functions[])(void) = {func1, func2};
    int choice;

    printf("Enter 0 for func1 or 1 for func2: ");
    scanf("%d", &choice);

    if (choice >= 0 && choice < sizeof(functions) / sizeof(functions[0])) {
        (*functions[choice])(); // 通过函数指针数组调用函数
    } else {
        printf("Invalid choice.\n");
    }

    return 0;
}

指针函数(Pointer Function)

概念:指针函数是一种返回指针的函数,它允许函数返回一个地址,这个地址可以指向一个变量、数组或其他数据结构。

声明示例:

int *myPointerFunction(void) {
    static int value = 42;
    return &value;
}

使用示例:

int *ptr = myPointerFunction(); // 调用指针函数并获取返回的指针
printf("%d\n", *ptr); // 使用返回的指针

应用示例:使用指针函数返回字符串的地址,并在其他函数中使用这个地址。

#include <stdio.h>

char *getString(void) {
    static char str[] = "Hello, World!";
    return str;
}

void printString(char *str) {
    printf("%s\n", str);
}

int main() {
    char *strPtr = getString();
    printString(strPtr); // 使用指针函数返回的指针
    return 0;
}

区别总结

  • 函数指针 是一种指针类型,它指向一个函数,可以被用来存储函数的地址,并通过这个地址调用函数。它们在回调函数、事件处理和多态性实现中非常有用。
  • 指针函数 是一种函数类型,它返回一个指针,这个指针可以指向一个变量、数组或其他数据结构。它们常用于返回动态分配的内存地址或静态数据的地址。


兄弟嵌入式
从入门到精通,学习并分享嵌入式软、硬件的知识。
 最新文章