二级c语言的问题(08年高教二级中的习题)

来源:百度知道 编辑:UC知道 时间:2024/06/07 07:57:33
1.#include <stdio.h>
#include <stdlib.h>
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);
}
为什么运行结果是1.10?
其中“%5.2f”“*s=*p1+*p2++;”不太明白
2.若变量已正确定义,执行下面语句
while (ch=getchar()==’A’)
为什么结果ch=1?
那个,第二题还有个条件是,输入A....我忘了打...

"%5.2f"意思为限制输出浮点数的长度为5,保留小数点后2位。

“*s=*p1+*p2++;”意思是取p1指向的地址的值加上p2指向的地址的值,将结果赋给s指向的地址的值;
其实最后输出时,s还是指向数组a的第一个元素,故为1.10。

while ((ch=getchar())==’A’)

因为传入到fun函数里同的s是main里面s的一个拷贝
于是,
void fun(float *p1,float *p2,float *s)
{
s = (float *)calloc(1,sizeof(float)); //在这里修改了s,但main那个还是没改变
*s = *p1 + *p2++ ;
}
所以,回到main,s还是等于a,输出的当然还是a[0],也就是1.10
C语言默认是按值传递的,调用fun(a,b,s);后,把S所指向的地址传给形参,在函数里面首先改变的是s的值,而s所指向的值并没有改变,即a数组中的值没有改变,在结束函数时,s仍然指向a数组,由于a数组的值没有改变,所以*s还是a[0]的值 即 1.1,按照输出格式则为1.10