C语言:以下程序的输出结果是怎么出来的?
来源:百度知道 编辑:UC知道 时间:2024/07/07 06:12:41
以下程序的输出结果是
A)11.10 B)12.00 C)21.10 D)1.10
void fun(float *p1,float *p2,float *s)
{ s=(float *)calloc(1,sizeof(float) );
*s=*p1+*p2++;
}
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);
}
答案选的是A,但一直没弄明白怎么出来的,各位高手帮忙解释下,谢了
重要说明:答案选的是D,我选的是A,错了!!!!!!!!!!!!!!!!!!
A)11.10 B)12.00 C)21.10 D)1.10
void fun(float *p1,float *p2,float *s)
{ s=(float *)calloc(1,sizeof(float) );
*s=*p1+*p2++;
}
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);
}
答案选的是A,但一直没弄明白怎么出来的,各位高手帮忙解释下,谢了
重要说明:答案选的是D,我选的是A,错了!!!!!!!!!!!!!!!!!!
正确答案不是A,应该是D,(可以运行试试),解释如下:
fun函数调用时,把数组a的首元素地址赋给p1,把数组b的首元素地址赋给p2,把指针s的值赋给形参s;
s=(float *)calloc(1,sizeof(float) );//为指针s开辟新的空间
*s=*p1+*p2++;//p1所指元素的值加上p2所指元素的值,把和赋给s所指变量,然后把p2所指的元素加1;因为上面为指针s新开辟了空间,从而s指向的元素不是主函数中s指向的元素,所以主函数中s指向的元素并没有变化,也就是a[0]的值不变;函数没有返回值。
主函数中的s仍然指向a的首元素,a[0]的值为1.1,故输出结果是1.10
也就是说影响这道题的关键是s=(float *)calloc(1,sizeof(float) );这一行,
如果没有这一行,答案将是A
fun函数就是计算a+b然后把结果赋值给s,a是取首地址指向的数1.1,b取首地址指向的数10.0,结果就是11.10。*p2++是*p2先参与运算,才再加1。