c语言动态存储分配与指针

问一下,在函数fun中传入main中的实参,代码*snew=*s;为什么会使snew指向实参p的地址而不是为s新分配的地址呢?谢谢高人指导

#include<stdio.h>
#include<stdlib.h>

void fun(float *p1,float *p2,float *s,float *snew)
{
    printf("location:Fun->s             %d\n",s);
    s=(float *)malloc(sizeof(float));
    printf("location:Fun->s    -malloc  %d\n",s);
    *s=*p1+*p2++;
    printf("location:Fun->s    -add     %d\n",s);
    *snew=*s;
    printf("location:Fun->snew -copy    %d\n",snew);
}

int main()
{
    float a[2]={1.1,2.2},b[2]={10.0,20.0};
    float *p=a,*pnew=a;
    fun(a,b,p,pnew);
    printf("Result : \n*p = %5.2f\n*pnew = %5.2f\n",*p,*pnew);
    return 0;
} 

#include
#include

void fun(float *p1, float *p2, float *s, float *snew)
{
printf("location:Fun->s %d\n", s);
s = (float *)malloc(sizeof(float));
printf("location:Fun->s -malloc %d\n", s);
*s = *p1 + *p2++;
printf("location:Fun->s -add %d\n", s);
*snew = *s;
printf("location:Fun->snew -copy %d\n", snew);
}

int main()
{
float a[2] = { 1.1, 2.2 }, b[2] = { 10.0, 20.0 };
float *p = a, *pnew = a;
fun(a, b, p, pnew); //此处是值传递,p和pnew的指向是不会变的...
printf("Result : \n*p = %5.2f\n*pnew = %5.2f\n", *p, *pnew);
return 0;
}

1,你可以将你的程序简化一下,因为问题本身又加上了逻辑问题。
2,你的malloc有问题
3,你要把*的含义弄清楚,你函数中是赋值,所以指向的地址没变。