C语言 动态存储分配 问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 18:56:01
有以下程序:
#include <stdio.h>
#include <stdlib.h>
void fun(float *p1,float *p2,float *s)
{ s=float(*)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
main()
{ float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);printf("%5.2f\n",*s);
}
程序的运行结果是
A 11.10 B 12.00 C 12.10 D 1.10

请给出答案,讲解过程,谢谢~
不好意思 有一点我打错了
第五行应该是
{ s=(float*)calloc(1,sizeof(float));
书上的答案是D 不知道为什么

#include <stdio.h>
#include <stdlib.h>
void fun(float *p1,float *p2,float *s)
{ s=(float*)calloc(1,sizeof(float));
*s=*p1+*p2++;
printf("%5.2f\n",*s);
}
main()
{ float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);
printf("%5.2f\n",*s);
}
你可以执行一下这个程序,在fun()函数里加了一个输出语句,输出结果为
11.0
1.10
原因是fun(a,b,s)调用时是址传递,不改变其值本身。

你自己执行不就行了

答案自己运行下程序 。
你这个程序有问题啊,s=float(*)calloc(1,sizeof(float)); 应该是
s = ( float* )calloc( 1, sizeof(float) ); 吧
理由是:C 语言中参数传递是单向值传递,所以fun()函数没有改变*s的值。

fun()中, *s=*p1+*p2++;++运算符优先级高,故*s = (*p1) + (*(p2++)); *s = 1.1 + 10.0 == 11.1; p2 == &b[1]; b[1]=20.0;
*s的值为11.1, p2的值只在fun中有效;
最后输出11.10选A;