崔铭1315 发表于 2020-8-16 16:46:31

我算不对,不知道错在哪了

#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={1.1,2.2},b={10.0,20.0},*s=a;
        fun(a,b,s);printf("%5.2f\n",*s);
}


为啥调试时1.10,我自己算是21.10{:10_291:} {:5_94:}

小甲鱼的铁粉 发表于 2020-8-16 16:53:51

#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={1.1,2.2},b={10.0,20.0},*s=a;
      fun(a,b,s);printf("%5.2f\n",*s);
}
这样试试

崔铭1315 发表于 2020-8-16 16:55:10

小甲鱼的铁粉 发表于 2020-8-16 16:53
这样试试

这个不是改代码,这是选择题,我不知道按什么顺序看才能算对

永恒的蓝色梦想 发表于 2020-8-16 17:01:18

#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 = { 1.1,2.2 }, b = { 10.0,20.0 }, * s = a;
    fun(a, b, &s); printf("%5.2f\n", *s);
}

小甲鱼的铁粉 发表于 2020-8-16 17:02:12

在这一步
s=(float *)calloc(1,sizeof(float));
这一步给s赋予了新的内存空间后原来传入的s的地址就消失了,所以下一句加法语句
*s= *p1+ *p2++;
并没有对main函数中的地址s赋值,所以说main函数中的*s还是a,也就是1.10

Hyg123456 发表于 2020-8-16 17:11:44

你的s不用指向a的地址,
        s=(float *)calloc(1,sizeof(float) );
        *s = *p1+ *++p2;
        printf("%f",*s);

405794672 发表于 2020-8-16 19:29:06

你在函数中,把S赋了新地址。新创建了一块内存,把值贱给它。然后,这块新内存中存的是p1+p2的值
但是调用它的主函数中,打印的S值是你在主函数中赋的值A数组。而a为1.1。所以它是1.1。
你自己算也不对。你的程序里面没有循环,只加了一次,应该是11.10。
页: [1]
查看完整版本: 我算不对,不知道错在哪了