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++;
    }

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?