请教一道二级C语言题

#include<stdio.h>#include<stdlib.h>voidfun(int*p1,int*p2,int*s){s=(int*)calloc(1,size... #include <stdio.h>
#include <stdlib.h>
void fun(int*p1,int*p2,int*s)
{s=(int *)calloc(1,sizeof(int));
*s=*p1+*p2;
free(s);
}
main( )
{int a[2]={1,2},b[2]={40,50},*q=a;
fun(a,b,q);
printf("%d\n",*q);
}
程序运行后的输出结果是______。

A 42

B 41

C 1

D 0

[解析] 本题考查把数组名作为函数参数。执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1,选项C正确。
*s=*p1+*p2; 是什么意思?为什么S的值没有变化呢?难道说free(s)释放了内存,就相当于s为空了吗?
展开
 我来答
风若远去何人留
2018-03-09 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450110
专业C/C++软件开发

向TA提问 私信TA
展开全部
在fun中, s先申请了内存, 赋值,释放。 所以改变的*s值, 是分配释放的空间。
而改变s, 是改变形参, 并不影响实参。
所以, 经过fun调用, 对于主函数中q和*q都没有任何影响。
于是输出的还是a[0] 也就是1.
选C。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式