c语言函数指针和指针函数的区别及代码示例

c语言函数指针和指针函数的区别及代码示例

在C或C++中,函数指针和指针函数是两个容易混淆但本质不同的概念。理解它们的区别对于深入掌握C/C++的指针和函数特性至关重要。

1. 函数指针

定义:函数指针是指向函数的指针。它存储了函数的地址,通过它可以调用该函数。

语法

返回类型 (*指针变量名)(参数类型列表);

示例

#include <stdio.h>  
  
void printHello() {  
    printf("Hello, World!\n");  
}  
  
int main() {  
    // 声明一个函数指针,指向没有参数、返回类型为void的函数  
    void (*funcPtr)();  
  
    // 将函数printHello的地址赋给函数指针  
    funcPtr = printHello;  
  
    // 通过函数指针调用函数  
    (*funcPtr)(); // 调用printHello  
  
    // 在C中,也可以省略解引用操作符,直接写 funcPtr();  
    funcPtr();  
  
    return 0;  
}

2. 指针函数

定义:指针函数是返回指针的函数。它和普通函数一样,有自己的参数和返回类型,只不过这个返回类型是某个类型的指针。

语法

返回类型* 函数名(参数类型列表);

注意:这里的关键是理解整个返回类型*作为函数的返回类型,而不是将返回类型*分开来看。

示例

#include <stdio.h>  
#include <stdlib.h>  
  
// 返回一个指向int的指针  
int* createArray(int size) {  
    // 分配一个整型数组  
    int* arr = (int*)malloc(size * sizeof(int));  
  
    // 初始化数组(这里简单处理,只设置第一个元素)  
    if (arr != NULL) {  
        arr[0] = 10;  
    }  
  
    return arr; // 返回指向数组的指针  
}  
  
int main() {  
    // 调用指针函数  
    int* ptr = createArray(5);  
  
    // 使用返回的指针  
    if (ptr != NULL) {  
        printf("%d\n", ptr[0]); // 输出 10  
        free(ptr); // 释放分配的内存  
    }  
  
    return 0;  
}

总结

  • 函数指针:指向函数的指针,用于调用函数。
  • 指针函数:返回指针的函数,返回的指针可以指向任何数据类型,包括数组、结构体等。

通过这两个概念,C/C++程序员可以实现更灵活、更强大的代码结构和数据处理方式。

posted @ 2024-07-02 21:56  琨为玉也  阅读(14)  评论(0编辑  收藏  举报