函数指针入门
函数指针(存放函数地址的指针)
作用:将函数作为参数传给另一个函数 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;
}