请问子函数为什么得不到返回值?

#include
#include
#include
#include
#include
#include
#include
#include
#define NR_END 1
#define FREE_ARG char*
float vector(long nl, long nh)
/
allocate a float vector with subscript range v[nl..nh] */
{
float *v;

v=(float *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(float)));
return v-nl+NR_END;

}

void free_vector(float v, long nl, long nh)
/
free a float vector allocated with vector() */
{
free((FREE_ARG) (v+nl-NR_END));
}

void spline(float x[], float y[], int n, float yp1, float ypn, float y2[])
{
int i,k;
float p,qn,sig,un,*u;
u=vector(1,n-1);
if (yp1 > 0.99e30)
y2[0]=u[0]=0.0;
else {
y2[0] = -0.5;
u[0]=(3.0/(x[1]-x[0]))*((y[1]-y[0])/(x[1]-x[0])-yp1);
}
for (i=1;i<=n-1;i++) {
sig=(x[i]-x[i-1])/(x[i+1]-x[i-1]);
p=sig*y2[i-1]+2.0;
y2[i]=(sig-1.0)/p;
u[i]=(y[i+1]-y[i])/(x[i+1]-x[i]) - (y[i]-y[i-1])/(x[i]-x[i-1]);
u[i]=(6.0*u[i]/(x[i+1]-x[i-1])-sig*u[i-1])/p;
}
if (ypn > 0.99e30)
qn=un=0.0;
else {
qn=0.5;
un=(3.0/(x[n-1]-x[n-2]))*(ypn-(y[n-1]-y[n-2])/(x[n-1]-x[n-2]));
}
y2[n-1]=(un-qn*u[n-2])/(qn*y2[n-2]+1.0);
for (k=n-1;k>=0;k--)
y2[k]=y2[k]*y2[k+1]+u[k];
free_vector(u,1,n-1);
}

void splint(float xa[], float ya[], float y2a[], int n, float x, float *y)
{
void nrerror(char error_text[]);
int klo,khi,k;
float h,b,a;

klo=1;
khi=n;
while (khi-klo > 1) {
    k=(khi+klo) >> 1;
    if (xa[k] > x) khi=k;
    else klo=k;
}
h=xa[khi]-xa[klo];
if (h == 0.0) 
printf("Bad xa input to routine splint");
a=(xa[khi]-x)/h;
b=(x-xa[klo])/h;
*y=a*ya[klo]+b*ya[khi]+((a*a*a-a)*y2a[klo]+(b*b*b-b)*y2a[khi])*(h*h)/6.0;

}

int main(void)
{
int n = 5;
float x[]={0.25,0.30,0.39,0.45,0.53};
float y[]={0.50,0.5477,0.6245,0.6708,0.7280};
float *abcd = 0;
float yp1 = 1;
float ypn = 2;
float y2[n];
spline(x, y, n, yp1, ypn, y2);
for (int i=0;i<n;i++)
{
printf("%.16f\n",y2[i]);
}
splint(x,y,y2,n,0.24,abcd);
printf("%.16f\n",abcd);
return 0;
}

在子函数splint中,为啥得不到返回值呢? 对应一个x应该有一个y返回才对,然而
printf("%.16f\n",abcd);
没结果为啥啊?要如何改呢?谢谢大家

float *abcd = 0;
你没有分配空间
应该是
float abcd1;
float *abcd = &abcd1;
...
splint(x,y,y2,n,0.24,abcd);