C语言题,拜求解释

来源:百度知道 编辑:UC知道 时间:2024/07/04 10:01:32
#include "stdio.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.也就是说*s的值不受函数调用(fun(a,b,s);)的影响,我后来把函数fun()删,结果不受影响。
那是不是*s赋值为a后就不能更改了?
本人菜鸟,大侠们帮帮忙解释下哈!
难道变量*s在赋初值之后,就不可以通过函数调用的方式改变它的值么?

首先说明一下,在函数中定义的变量和在主函数中的不一样,在函数中对一个变量赋初值不会影响它在主函数中的结果的。你在主函数中赋初值s=a,是将数组a的第一个元素的地址付给了指针变量s,而在函数中无论s的值怎样改变是无效的。像这类通过函数改变变量值是很难实现的,要么不用被调函数,要么就用外部变量,下面是改过的:
#include "stdio.h"
float *s ;
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);
}
我没有运行你试试看是否你要的结果,我看了一下答案或许是11.10吧。

是的,不可以通过函数调用来改变它的值,要想通过函数调用来改变主函数中变量的值,除非你将主函数中变量的值的地址传递给被调函数,然后在可以改变,或者你将需要通过被调函数改变值的变量定义为外部变量。

大哥,说明白一点啊,你的程序很乱啊,有很多画蛇添足和巧合的

这个函数没有真正发挥作用