![]() |
#2
Gam0012020-05-06 19:33
|

#include <stdio.h>
#include <stdlib.h>
#define LENGTH 3
int main(void) {
double *map(double (*)(double), double *, int); // 第一个参数是函数指针
double pow2(double);
double * p = map(pow2, (double[LENGTH]){1.2, 2.8, 3.4}, LENGTH); // 第一个参数为函数名
for (int i = 0; i < LENGTH; ++i) {
printf("%lf, ", p[i]);
}
puts("");
free(p);
p = NULL;
return 0;
}
double pow2(double num) { return num * num; }
double *map(double (*pf)(double), double *p, int n) {
double *pd = malloc(n * sizeof(double));
for (int i = 0; i < n; i++) {
pd[i] = pf(p[i]); // 函数指针pf, K&R C只允许(*pf)(p[i]), ANSI C以及以后的标准允许两种
}
return pd;
}
输出结果是
1.440000, 7.840000, 11.560000,