这个C程序问题在哪里?

来源:百度知道 编辑:UC知道 时间:2024/05/14 20:12:39
#include<stdio.h>
#include<stdlib.h>
void fun(float *p1,float *p2,float *s)
{
s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2;
}
void mian()
{
float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);
printf("%5.2f\n",*s);
}
我觉得运行后结果应该是11.10,但是实际在VC++上运行结果是1.10,
请大家告诉我原因,谢谢。

晕死,那个函数分配的指针s根本没带出来。函数运行完成后
*s=a,s依旧指向a,所以就是a[0], 1.1啊。

了解一下函数参数是怎么堆栈操作的。

*s指向的是a[0]的值,也就是1.1,调用函数时传递的是值而不是地址.所以*S最后还是指向a[0],所以输出1.10

a[0]的值,也就是1.1,调用函数时传递的是值而不是地址.所以*S最后还是指向a[0],

调用函数时
fun(a,b,s);
其中s指向的是a[0],是个数组的元素地址,不可变动,所以是单向值传递,不能在fun()函数里更改s的地址的值