h-b-z-d-j-s-m 发表于 2022-5-24 17:32:02

形参实参传递问题

请问为什么最后没有改变s的值啊,
我的理解是实参不都是地址吗,形参都是指针,为什么没有改变实参的值啊,什么情况下会改变
#include<stdio.h>
#include<stdlib.h>
void fun(double *p1,double *p2,double *s)
{
        s=(double*)calloc(1,sizeof(double));
        *s=*p1+*(p2+1);
}
main()
{
        double a={1.1,2.2},b={10.0,20.0},*s=a;
        fun(a,b,s);
        printf("%5.2f\n",*s);
}

傻眼貓咪 发表于 2022-5-24 17:41:32

#include<stdio.h>
#include<stdlib.h>
void fun(double *p1, double *p2, double *s)
{
    // s=(double*)calloc(1, sizeof(double)); <------------- 注意这里,这行代码不需要
    *s = *p1 + *(p2+1); // 1.1 + 20.0 = 21.10 <------------- 注意这里,只是作普通运算,无需多加内存
}
int main() // <------------- 注意这里 int main()
{
    double
      a = {1.1, 2.2},
      b = {10.0, 20.0},
      *s = a;
    fun(a, b, s);
    printf("%5.2f\n", *s);
}21.10

wp231957 发表于 2022-5-24 17:42:08

s=(double*)calloc(1,sizeof(double));
你这个语句想干嘛??s指向了a已经有空间了
你又重新赋值,那么此s非彼s了,还想传啥,传不回来了

h-b-z-d-j-s-m 发表于 2022-5-24 17:46:52

wp231957 发表于 2022-5-24 17:42
s=(double*)calloc(1,sizeof(double));
你这个语句想干嘛??s指向了a已经有空间了
你又重新赋值,那么 ...

这个是题目给的代码啊,结果是1.10,我想知道为什么是1.10

傻眼貓咪 发表于 2022-5-24 17:50:29

h-b-z-d-j-s-m 发表于 2022-5-24 17:46
这个是题目给的代码啊,结果是1.10,我想知道为什么是1.10

3 楼大佬已经说明

wp231957 发表于 2022-5-24 17:51:32

h-b-z-d-j-s-m 发表于 2022-5-24 17:46
这个是题目给的代码啊,结果是1.10,我想知道为什么是1.10

我不是说了吗,那个函数无法实现你的期望值
所以*s其实不就是a数组的第一个数吗,
页: [1]
查看完整版本: 形参实参传递问题