本期博客紧跟上期吖,主要介绍指针与函数的相关内容。
目录
一、返回指针的函数
返回指针型数据的函数叫做指针函数,一般格式如下:
类型说明符 *函数名(形参列表)
{
函数体
}
说明:1.指针函数比普通函数在函数名前面多了一个* ,这个 * 号表示函数的返回值是一个指针类型数据;
2.类型说明符表示返回的指针型数据所指向的数据类型;
3.函数体中,return语句返回的可以是变量的地址、数组元素的地址或指针变量,也可以是结构体等构造数据类型的首地址。
//例如求数组a中各元素的最小值
int *min(int arr[],int n)//定义指针函数
{
int *pm,i;//定义指针变量
pm=&arr[0];
for(i=1;i<n;i++){
if(arr[i]<*pm)
pm=&arr[i];//将pm指向当前最小值的元素
}
return pm;//返回指向数组arr最小值的指针pm
}
二、指向函数的指针
1.函数指针的定义
类型说明符(*指针变量名)(形参变量);
//例如
int(*pf)(int,int);
说明:1.类型说明符表示指针变量所指向函数的返回值类型
2.*指针变量名两边的括号不能省略,否则就变成定义返回指针的函数。
3.形参列表表示指针变量所指向函数的形参类型,当函数没有参数时圆括号不能省略。
2.函数指针的赋值
指针变量名=函数名;
int getmax(int a,int b)
{
if(a>b)return a;
else return b;
}
int(*pf)(int,int);
pf=getmax;//将函数名赋值给指针变量
说明:1.指针变量名必须是以定义的指向函数的指针变量,函数返回值与指针变量所指向的类型要一致。
2.函数名后面不能带圆括号和参数。
3.通过函数指针调用函数
//例如前面的getmax函数调用方法有两种
//max=(*pf)(10,20);
//max=pf(10,20);
(*指针变量名)(实参列表)
指针变量名(实参列表)
说明:这两种都可以但是建议用(*指针变量名)(实参列表),以表明为函数指针,增强程序可读性。
4.函数指针作为函数的参数
例如:用矩形法求函数f(x)在区间[a,b]上的定积分,,,
#include<stdio.h>
#include<math.h>
double funintefral(double(*pf)(double), double a, double b)
{
double dx = 0.001;
double sum = 0.0, x = a;
while (x < b)
{
sum = sum + (*pf)(x) * dx;
x = x + dx;
}
return sum;
}
double f1(double x)
{
return x * x * x;
}
double f2(double x)
{
return x * sin(x);
}
double f3(double x)
{
return 1 * x * cos(x);
}
int main()
{
printf("%3.f", funintefral(f1, 0, 1));
printf("%3.f", funintefral(f2, 1, 2));
printf("%3.f", funintefral(f3, 2, 3));
return 0;
}
本期博客到这里就结束啦~~后期还会有指针相关内容哟,喜欢的话点赞收藏加关注吧!!