x137186008 2015-02-13 03:23 采纳率: 0%
浏览 1853

初学C语言,一个小问题

#include
#include
void fun(float *p1,float *p2,float *s)
{s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
void main()
{float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=b;
fun(a,b,s);printf("%5.2f\n",*s);
}
为什么程序的结果是10.00呢?

  • 写回答

10条回答 默认 最新

  • cs_DM 2015-02-13 04:07
    关注

    因为fun函数中float *s _只能改变s指向地址的值,针对本身地址的指向不会做改变。
    所以函数中对s重新calloc,只是在函数域中自动为s重新创建一个临时的空间,这时的s就不再是实参指向的s(main函数中)了,可以简单的认为是函数域自己的一个局部变量s指向了一块临时空间,之后的操作只是对临时空间的操作,并不会影响实参s,即main函数中float
    *s_。
    要想改变main函数中s的值,没必要在函数中重新对s分配一块空间:
    void fun(float *p1,float *p2,float *s)
    {
    *s=*p1+*p2++;
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么