鱼C论坛

 找回密码
 立即注册
查看: 1348|回复: 6

[已解决]我算不对,不知道错在哪了

[复制链接]
发表于 2020-8-16 16:46:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
void fun(float *p1,float *p2,float *s)
{
s=(float *)calloc(1,sizeof(float));
*s= *p1+ *p2++;
}
int 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,我自己算是21.10
最佳答案
2020-8-16 19:29:06
你在函数中,把S赋了新地址。新创建了一块内存,把值贱给它。然后,这块新内存中存的是p1+p2的值
但是调用它的主函数中,打印的S值是你在主函数中赋的值A数组。而a[0]为1.1。所以它是1.1。
你自己算也不对。你的程序里面没有循环,只加了一次,应该是11.10。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-16 16:53:51 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. void fun(float *p1,float *p2,float *s)
  4. {
  5. s=(float *)calloc(1,sizeof(float));
  6. *s= *p1+ (*++p2);
  7. }
  8. int main()
  9. {
  10.         float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
  11.         fun(a,b,s);printf("%5.2f\n",*s);
  12. }
复制代码

这样试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-16 16:55:10 | 显示全部楼层

这个不是改代码,这是选择题,我不知道按什么顺序看才能算对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 17:01:18 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. void fun(float* p1, float* p2, float** s)
  4. {
  5.     *s = (float*)calloc(1, sizeof(float));
  6.     **s = *p1 + *p2++;
  7. }
  8. int main()
  9. {
  10.     float a[2] = { 1.1,2.2 }, b[2] = { 10.0,20.0 }, * s = a;
  11.     fun(a, b, &s); printf("%5.2f\n", *s);
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 17:02:12 | 显示全部楼层
在这一步
s=(float *)calloc(1,sizeof(float));

这一步给s赋予了新的内存空间后原来传入的s的地址就消失了,所以下一句加法语句
*s= *p1+ *p2++;

并没有对main函数中的地址s赋值,所以说main函数中的*s还是a[0],也就是1.10
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-16 17:11:44 | 显示全部楼层
你的s不用指向a的地址,
        s=(float *)calloc(1,sizeof(float) );
        *s = *p1+ *++p2;
        printf("%f",*s);
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 19:29:06 | 显示全部楼层    本楼为最佳答案   
你在函数中,把S赋了新地址。新创建了一块内存,把值贱给它。然后,这块新内存中存的是p1+p2的值
但是调用它的主函数中,打印的S值是你在主函数中赋的值A数组。而a[0]为1.1。所以它是1.1。
你自己算也不对。你的程序里面没有循环,只加了一次,应该是11.10。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-3 12:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表