函数指针入门

函数指针(存放函数地址的指针)

作用:将函数作为参数传给另一个函数 int(*f)(int)//

-------------------------------------------------------------------

例1.找出相等的三角形数,五边形数和六边形数

【注】六边形数一定大于三角形数和五边形数,所以可以枚举六边形数和三角形数以及五边形数进行对比

#include<stdio.h>
#include<stdlib.h>
#include<inttypes.h>
int64_t t(int64_t n)//返回一个三角形数
{
    return n*(n+1)/2;
}
int64_t p(int64_t n)//返回一个五边形数
{
    return n*(3*n-1)/2;
}
int64_t h(int64_t n)//返回一个六边形数
{
    return n*(2*n-1);
}
int64_t bio(int64_t (*f)(int64_t),int64_t y)//二分查找,传入一个y值,返回函数所对应的x值。这里就用到了函数指针
{
    int64_t head=1,tail=y,mid;
    while(head<=tail)
    {
        mid=head+tail>>1;
        if(f(mid)==y)return mid;
        if(f(mid)<y)head=mid+1;
        else tail=mid-1;
    }
    return -1;
}
int main()
{
    int64_t n=144;
    for(;;n++)
    {
        if(bio(t,h(n))==-1)continue;
        if(bio(p,h(n))==-1)continue;
        else
        printf("%d\n",h(n));
        break;
    }
    return 0;
}

posted @ 2022-05-03 10:38  阳zzz  阅读(33)  评论(0)    收藏  举报