指针函数和函数指针的简单总结:

指针函数和函数指针的总结:

一个函数会在内存中占用连续的一段内存空间

1. 函数指针

函数指针就是指向函数的一个指针,它指向函数的入口地址,通过这个指针就能调用这个函数,类似于给函数起别名。

定义(主要在main方法中进行定义):

类型    (*符号名)(参数类型列表)

可以先定义再初始化,也可以定义的时候直接初始化

//举例说明一哈
int max(int a,int b){
    return a > b ? a : b;
}
int main(){
    int a=5,b=7;
    int (*fun)(int ,int )=max;
//  int (*fun)(int x,int y)=max;  这种也可以定义
//  int (*fun)=max;   这种见网上有人用,但是我编译不通过
    cout<<max(a,b)<<"    "<<fun(a,b)<<"    "<<(*fun)(a,b)<<endl;
}

运行结果

莫怪莫怪

可以看出,运行结果中三种方式得到的结果一样,在使用时(*fun)与fun效果一样,所以以后可以直接用fun

主要用途:通过函数指针,能够在函数里面更加方便的调用函数或者在数组里能够调用函数。

2. 指针函数

函数指针归根到底是一个指针,而指针函数本身就是一个函数,只不过要求它的返回值是指针类型。

定义(它是定义一个函数):

类型     *函数名(参数){

                代码块;
                (返回值必须为所指定的指针类型)    
}

如 int *max(int a,int b); 这个函数的返回值必须是一个int*类型,如果直接返回a或者b会出现编译错误。

int *max(int a,int b){
    if(a>b) return a;
    else return b;
}
int main(){
    int a=2,b=3;
    cout<<"max = "<<*max(a,b)<<endl;
}

运行结果如下:
Dev-C++
它告诉我们说:从“int”到“int*”的转换无效。
也就是说,我们的返回值不是函数规定的返回值类型,我们应该返回一个指针出来。

//第一种
int *max(int a,int b){
    int *p=&a;
    int *q=&b;
    if(a>b) return p;
    else return q;
}
//我们可以这样写,因为p,q本身是一个int的指针类型,可以直接返回,
//但是如果我们 return *p 就不对了,因为*p是取指针对应的值也就是a的值,是int类型。
//第二种
int *max(int a,int b){
    if(a>b) return &;
    else return &b;
}
//我们直接用& 取地址进行返回一个指针。
//第三种定义方式
int *max(int *_a,int *_b){
    if(*a>*b) return a;
    else return b;
}
//传值是就是一个指针,传出去时也是一个指针,
//if里面要使用*a来获取指针的值进行判断大小,要不然判断的就是两个地址的大小。

注意点:在使用时,要使用*函数名来调用。

int main(){
    int a=2,b=3;
    cout<<"max = "<<*max(a,b)<<endl;
    cout<<"max = "<<max(a,b)<<endl;   // 相差一个*号
}

运行结果:
yes
能看出来上面是值,下面返回的是地址,所以我们调用时要带上*号。

函数指针有两个用途:调用函数和做函数的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大da怪i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值