c语言题目,求解释!谢谢
2个回答
展开全部
第一题,函数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。
第二题,变量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。仔细看看就明白啦。
展开全部
第一题的正确答案是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
变量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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询