c语言题目,求解释!谢谢

 我来答
__Kislyl__
2015-01-14 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:65
采纳率:0%
帮助的人:60.8万
展开全部
第一题,函数fun的两个参数第一个是传指针(传入了&b也就是b的地址),第二个参数是传值,所以调用fun后main函数中的变量b的值被fun修改了,而变量a保持不变。
第二题,变量r是个指向数组a首地址的指针,f(r)中r赋值给了p也就是说p也指向a的首地址,p = p+3后p移动到a数组的第4位也就是*p = 4,所以第一个输出为4。而f中的局部变量p并不改变r的值,所以f(r)之后r仍然指向a的首地址,所以*r依然为1。
更多追问追答
追问
那为什么顺序是4.1不是1.4
追答
因为是先调用了f(r)再调用的print。仔细看看就明白啦。
jiqing0925
2015-01-14 · 超过60用户采纳过TA的回答
知道小有建树答主
回答量:113
采纳率:80%
帮助的人:74.8万
展开全部
第一题的正确答案是A.
变量b传指针给函数fun,在fun函数内,它的ascii码加1,本来是'a',变成'b'。(因为 'a' + 1 == 'b')
变量a传值给fun,在fun内,它的ascii码加1, 值由 'A', 变成 'B'。
在fun函数内的printf会输出 bB

因为变量b传指针,所以它在fun内的操作改变它在外面的值,它在main内也变成'b'.
变量a只是传值,虽然在fun内变成'B',但不影响main内的变量a,所以a的值依然是'A'
因此main内的printf输出 bA

所以最后输出是 b,B,b,A ,答案是A

第二题中 r是数组a的首地址,也就是a[0]的地址。
r传值给函数f, 这个首地址的值 + 3,指向的是a[3],因此 *p = 4。
因为r是传值给f, 所以在f内+3不影响main内r的值, r仍然指向a[0], 所以 *r = 1
因此答案是 4,1
更多追问追答
追问
谢谢我看懂你的回答了~那第二题为什么不是1.4
追答
因为先执行 函数f,所以先输出4,
f返回后,main输出,输出1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式