注册 登录
编程论坛 C语言论坛

调试出来为什么是1.1?

吖吼 发布于 2019-03-19 20:03, 1881 次点击
#include <stdio.h>
#include <stdlib.h>
void fun(double *p1,double *p2,double *s)
{
    s=(double *)calloc(1,sizeof(double));
    *s=*p1+*(p2+1);
}
void main()
{
    double a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
    fun(a,b,s);
    printf("%5.2f\n",*s);
}
fun()函数中s明明是传址调用为什么值不变仍为1.1?
3 回复
#2
吹水佬2019-03-20 06:34
对s处理好象有点乱,不清楚想做什么。
是不是这意思:
#include <stdio.h>
#include <stdlib.h>
void fun(double *p1,double *p2,double *s)
{
    *s=*p1+*(p2+1);
}
void main()
{
    double a[2]= {1.1,2.2},b[2]= {10.0,20.0}, *s;
    s=(double *)calloc(1,sizeof(double));
    fun(a,b,s);
    printf("%5.2f\n",*s);
}
#3
rjsp2019-03-20 09:36

s=(double *)calloc(1,sizeof(double));
这句删掉试试
#4
waterstar2019-03-20 17:31
因为指针变量传递方式仍然是值传递,你先改变了s的值,然后对改变后的s指向的值做了改变,本质上,没有去操作原有的s所指向的位置。
1