形参实参传递问题
请问为什么最后没有改变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);
} #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 s=(double*)calloc(1,sizeof(double));
你这个语句想干嘛??s指向了a已经有空间了
你又重新赋值,那么此s非彼s了,还想传啥,传不回来了
wp231957 发表于 2022-5-24 17:42
s=(double*)calloc(1,sizeof(double));
你这个语句想干嘛??s指向了a已经有空间了
你又重新赋值,那么 ...
这个是题目给的代码啊,结果是1.10,我想知道为什么是1.10 h-b-z-d-j-s-m 发表于 2022-5-24 17:46
这个是题目给的代码啊,结果是1.10,我想知道为什么是1.10
3 楼大佬已经说明 h-b-z-d-j-s-m 发表于 2022-5-24 17:46
这个是题目给的代码啊,结果是1.10,我想知道为什么是1.10
我不是说了吗,那个函数无法实现你的期望值
所以*s其实不就是a数组的第一个数吗,
页:
[1]