一道二级C语言的题目

来源:百度知道 编辑:UC知道 时间:2024/06/23 16:21:03
7.以下程序的输出结果是()
void fun(float *p1,float *p2,float *s)
{ s=(float*)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
main()
{ floats〔2〕={1.1,2.2},b〔2〕={10.0,20.0},*s=a;
fun(a,b,s);
printf("%5.2f\n",*s);
}
A)11.10
B)12.00
C)21.10
D)1.10

答案是D
哪位好心人给解释一下!!
谢谢

void fun(float *p1,float *p2,float *p3) // 为了避免混淆,我把s改为p3
{
p3=(float*)calloc(1,sizeof(float));
*p3=*p1+*p2++;
}
main()
{
float a[2]={1.1,2.2};b[2]={10.0,20.0},*s=a; // *s = 1.100000
fun(a,b,s);
printf("%5.2f\n",*s);
}

fun函数中为参数p3申请了新的内存,*p1+*p2++的计算结果放入了p3指向的内存地址中。而main()中s比毫未变,因为fun()函数没有返回任何值。所以*s的值还是1.100000,经过printf打印,结果为1.10
事实上fun()函数会造成内存泄露,每调一次fun函数就会申请一块内存却得不到释放

楼上说的很对
其实就相当于
main()
{
floats a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;

float *p=s;
p=(float*)calloc(1,sizeof(float));
*p=a[0]+b[0];

printf("%5.2f\n",*s);
}
这样看就比较清楚了

运算 优先级