函数指针与指针函数

1. 函数指针

        函数指针是指向函数的指针。它保存了函数的地址,可以通过它来调用函数。函数指针通常用于实现回调函数、函数数组等。

1.1 定义和使用 

  1. 定义:函数指针的定义包括函数的返回类型、参数类型和参数顺序。
  2. 赋值:可以将一个函数的地址赋值给函数指针。
  3. 调用:通过函数指针可以调用函数。

1.2 示例 

#include <iostream>

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

// 定义函数指针类型
typedef int (*funcPtr)(int, int);

int main() {
    // 声明一个函数指针并赋值
    funcPtr ptr = &add;
    
    // 使用函数指针调用函数
    int result = ptr(3, 4); // 相当于调用 add(3, 4)
    
    std::cout << "Result: " << result << std::endl; // 输出: Result: 7
    
    return 0;
}

1.3 语法解释 

  • typedef int (*funcPtr)(int, int);:定义了一个函数指针类型 funcPtr,指向返回 int 类型,且接受两个 int 类型参数的函数。
  • funcPtr ptr = &add;:声明一个函数指针 ptr 并将 add 函数的地址赋值给它。
  • ptr(3, 4);:通过函数指针调用 add 函数。

2. 指针函数 

        指针函数是一个返回指针的函数。它们的主要特点是返回值类型是指针类型。指针函数常用于返回数组或动态分配的内存的地址。

2.1 定义和使用 

  1. 定义:指针函数的定义包括返回值是一个指针,通常在函数名前使用返回类型指针。
  2. 调用:调用指针函数时,需要处理返回的指针,通常用于指向数组或动态分配的内存。

2.2 示例 

#include <iostream>

// 定义一个指针函数,返回指向整数的指针
int* getArray() {
    static int arr[3] = {1, 2, 3};
    return arr;
}

int main() {
    // 调用指针函数并获取返回的指针
    int* ptr = getArray();
    
    // 输出数组的内容
    for (int i = 0; i < 3; ++i) {
        std::cout << ptr[i] << " "; // 输出: 1 2 3
    }
    
    return 0;
}

 2.3 语法解释

  • int* getArray();:定义一个返回指向 int 类型指针的函数 getArray
  • int* ptr = getArray();:调用指针函数 getArray 并获取返回的指针。
  • ptr[i]:通过指针 ptr 访问数组元素。

3. 区别总结 

  • 函数指针
    • 定义:指向函数的指针,保存函数地址。
    • 用途:调用函数、回调函数、函数数组。
    • 示例typedef int (*funcPtr)(int, int);
  • 指针函数
    • 定义:返回指针的函数,返回值是一个指针。
    • 用途:返回数组地址、动态分配内存的地址。
    • 示例int* getArray();

4. 比较 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值