#include#includevoid fun(float *p1,float *p2,float *s){s=(float *)calloc(1,sizeof(float));*s=*p1+*p2++;}int main(){float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);}为什么输出是1.10,求解fun到底发生了什么

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/22 22:40:12
#include#includevoidfun(float*p1,float*p2,float*s){s=(float*)calloc(1,sizeof(float));*s=*p1+*p2++;}i

#include#includevoid fun(float *p1,float *p2,float *s){s=(float *)calloc(1,sizeof(float));*s=*p1+*p2++;}int main(){float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);}为什么输出是1.10,求解fun到底发生了什么
#include
#include
void fun(float *p1,float *p2,float *s)
{s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
int main()
{float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);printf("%5.2f\n",*s);
}
为什么输出是1.10,求解fun到底发生了什么

#include#includevoid fun(float *p1,float *p2,float *s){s=(float *)calloc(1,sizeof(float));*s=*p1+*p2++;}int main(){float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);}为什么输出是1.10,求解fun到底发生了什么
你认为应该是多少呢?输出是正确的,其值就是a[0],它被初始化为1.1.因为fun中为s指针重新分配了指向,*s=*p1+*p2++;这一句中的s已不再指向a了.因为指针形参本身也是拷贝调用,所以main中的s仍然是指向a的,printf("%5.2f\n",*s);输出自然是a[0].可以这样验证,在fun中的*s=*p1+*p2++;后加一句printf("%5.2f\n",*s);,它就应该输出11.1了……