#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呢?
初学C语言,一个小问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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里的文字?