问一下,在函数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,你要把*的含义弄清楚,你函数中是赋值,所以指向的地址没变。