有以下程序 #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[2] = { 1.1, 2.2 }, b[2] = { 10.0, 20.0 }, *s=a; fun( a, b, s ); printf( "%5.2f\n", *s); }程序的输出结果是A) 21.10B) 11.10C) 12.10D) 1.10为什么是d。不懂为什么s还指向a
2 回答
已采纳
TDYu
TA贡献3条经验 获得超1个赞
首先主程序中s指向a的地址,你也确实把这个地址丢给fun函数的s了。
然后你fun函数里的s重新分配了地址,这时代表fun函数里的s指向别的位置没错。
但是重点是,你主程序中的s并没有改变指向,它依然指向a没变过,改变的只是你在fun函数里的s,这两边的s是存活在不同的区域完全不同的两个。
你可以想像成两个一样名字的人住到一起(指向一样位置),但后来有一个搬走了(fun函数里的),可是原本的那个确实还在那屋没走。
- 2 回答
- 0 关注
- 1656 浏览
添加回答
举报
0/150
提交
取消