#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/11/16 05:25:13
#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(
xRmOP+ de7O{ A&[(Ie9(B ي1lt O{H"դ=ys'7U<\~y~aZ#Ue)2SȸǕ! |JО-T䌑Fv yXEӣBYy.]DȢl,&0 ҕdBEPSEY}O!@HtҡEl T\mĻXaLJw O2Ǧ[_AO!p"cX_d/-x1_ nm^pNGbw_ *9U>{7B8Y-p0cax=Լmh[`6d" XP D5(8XAڍ86Wݏ=W}y9~x/,:a_ `\/tg;rxUzpEVY9&+x^$94 C߭FQ3)

#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了……