//请求出以下程序的最后一个结果值(参数传入型 * p):
#include <stdio.h>
#include <stdlib.h>
void f(int * (* fun)(int *), int * p,int m)
{
for (int i = 1; i <= m; i++)
{
* (p+i-1) = *(* fun)(&i);
}
}
int * mult(int * n)
{
static int m = 1;
return &(m *= * n);
}
void main()
{
//int p[3];
int * p, m = 3;
p = (int *)malloc(m*sizeof(int));
f(mult, p, m);
for(int i = 0; i < m; i++)
printf("%d\n", * (p+i));
free(p);
}
//解决因局部变量导致数组在函数调用完后被释放的问题(函数内部动态分配内存空间型):
#include <stdio.h>
#include <stdlib.h>
int * f(int * (* fun)(int *), int m)
{
int * p;
p = (int *)malloc(m * sizeof(int));
for (int i = 1; i <= m; i++)
{
* (p+i-1) = *(* fun)(&i);
}
return p;
}
int * mult(int * n)
{
static int m = 1;
return &(m *= * n);
}
void main()
{
int * a, m = 10;
a = f(mult, m);
for(int i = 0; i < m; i++)
printf("%d\n", * (a+i));
free(a);
}