相同代码在不同编译器下的执行问题?

#include <stdio.h>
#include <stdlib.h>
void fun(double *p1,double *p2,double *s)
{
    s=(double *)calloc(1,sizeof(double));
    *s=*p1 + *p2++;
}
int main()
{
    double a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
    fun(a,b,s);
    printf("%5.2lf\n",*s);
    return 0;
}

上述代码在vc++6.0中正常执行,输出 1.10,可是在codeblocks 16.01(32位)编译器下输出的却是-0.00,我debug了下也没找出原因,请问这是为什么呢?
图片描述

阅读 4.8k
4 个回答
新手上路,请多包涵

我的运行结果也是没问题的,那就是CodeBlock的原因了,建议你一步一步看看内存里发生了什么。
还有你这个程序的目的是什么?是在学习指针吗?

没有特别看明白你这个程序的目的是干嘛?是验证calloc的什么东西?

另外调用fun的目的是什么,指针s传入之后又重新赋值了,也就是说你最终调用的*s就是a[0]的值,fun的调用对最终输出没啥影响

你这个代码明显有问题,你确定两个编译器里写的同样的代码吗?依我看,那个函数的第三个参数s应该是一个二级指针或者指针的引用。

你这个有点像easyui的treegrid、为什么不用easyui框架来布局呢

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进