跳转至

函数指针与指针函数

约 140 个字 107 行代码 预计阅读时间 2 分钟

alt text

指针函数:int* fun(int x,int y);

函数指针:int (*fun)(int x,int y);

1.函数指针

1.1 声明

#include <iostream>
using namespace std;
int func(int x){
    cout << endl;
}
int main() {


    int (*fun)(int x);  //声明一个函数指针
    fun = func;     // 将func函数的首地址赋给指针fun
    //func = &func
    //赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针fun就指向函数func(x)的首地址。
    cout << (void *)fun << endl;
    //将函数指针 fun 转换为 void 指针类型
    return 0;
}

1.2 调用方法

#include <iostream>
using namespace std;
int func(int x){

    return x;
}
int main() {
    int (*fun)(int x);  //声明一个函数指针
    fun = func;     // 将func函数的首地址赋给指针fun
    cout << fun(1) << endl;  // 输出1
    cout << (*fun)(3) << endl; // 输出3
    // fun(1) 等价于 (*fun)(1)
    return 0;
}

1.3 作为函数参数

#include <iostream>
using namespace std;
int fun(int (*pfun)(int, int), int a, int b){
    return pfun(a,b);
}


int max(int a, int b){
    return a>b ? a : b;
}

int main(){
    int maxval = fun(max,1,2); //注意可以直接传入函数名,作为参数
    cout << maxval << endl; //输出2
}

1.4 函数指针数组

  • 函数指针数组是一个元素均为函数指针的数组。
  • 写法:int (*arr[n]) (int x,int y,...)
#include <iostream>
using namespace std;

//返回两个数中较大的一个
int max(int a, int b){
    return a>b ? a : b;
}

//返回两个数中较小的一个
int min(int a, int b){
    return a<b ? a : b;
}

int main(){
    int x, y, maxval, minval;

    int(*arr[2])(int x, int y) = { max, min};

    maxval = arr[0](1,2); // 2
    minval = arr[1](1,2); // 1
    cout << maxval << " " << minval << endl;
    return 0;
}

1.5 类内函数指针

class P{
public:
    void Sum(int x, int y){
        cout << x + y << endl;
    }
};
int get(int x,int y){
    return x + y;
}
int main(){
    P p1;
    int (* g) (int,int);
    g = get; 

    void (P::*a)(int, int) ; //注意这里定义类内函数指针的方式
    a = &P::Sum; //将 P 类的 Sum 成员函数的地址赋给指针 a ,注意这里要加&,与普通函数不同
    (p1.*a)(5, 6); // 类内函数调用,这里注意要加类名和*
    // 这里如果p1是指针,则需要写成(p1->*a)(5,6);
    return 0;
}

2.指针函数

  • 它是一个函数,函数的返回值是一个地址值。
  • 函数返回值必须用同类型的指针变量来接受。

2.1 指针函数的调用

int *max(int *a, int *b){
    int *ptr;
    ptr = *a>*b ? a : b;
    return ptr;
}

int main(){
    int x, y, *maxval;

    printf("Input two numbers:");
    scanf("%d %d", &x, &y);
    maxval = max(&x,&y);
    printf("Max value: %d\n", *maxval);

    return 0;
}

颜色主题调整

评论区~

有用的话请给我个赞和 star => GitHub stars
快来跟我聊天~