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

如题所述

第一题,函数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。仔细看看就明白啦。

追问

哦哦好的谢谢你啦

追答

客气啦~求按个采纳~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-14
第一题的正确答案是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

追问

哦哦原来如此~我知道啦~谢谢你的耐心回答

追答

如果对你有所帮助,请采纳答案。