跪求高手解释下面2题C语言题目,万分感谢

第一题#include<stdio.h>voidf(int*p,int*q)main(){intm=1,n=2,*r=&m;f(r,&n);printf("%d,%d",... 第一题
#include<stdio.h>
void f(int *p,int *q)
main()
{ int m=1,n=2,*r=&m;
f(r,&n); printf("%d,%d",m,n);
}
void f(int *p,int *q)
{ p=p+1;*q=*q+1;}
这里最终答案是1,3。
第二题
#include<stdio.h>
void fun(int *a,int *b)
{ int *c;
c=a;a=b;b=c;
}
main()
{ int x=3,y=5,*p=&x,*q=&y;
fun(p,q); printf("%d,%d",*p,*q);
fun(&x,&y); printf("%d,%d",*p,*q);
}
这里答案是3,5,3,5。.
这两题不都是值传递的吗?为什么第一题n是地址传递了,这两题我看不出什么区别,望高手帮忙,十分感谢!!!
展开
 我来答
vbsvbs99
2011-02-13 · 超过14用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:0
展开全部
其实很简单 所谓的址传递还是值传递 只不过传递的是地址的值罢了
也就是说传递指针就是相当于传递 int。(32位)
你在函数里修改值传递过来的int当然不影响外面的东西了。
想要影响必须解引用(*)也就是说修改这个int保存的地址里的内容。

不信你试试void p(int a){//传递一个int
*(int*)a=1;
}
mian()
{
int b=5;
pp((int)&b); //传递一个int里面保存b的地址
printf("%d",b);
}

你那题目第一个函数修改的是 值传递进去的p和 q内的地址保存的内容。
因为是值传递所以main里的r不会改变什么 因为n的地址保存的内容被改变了所以n被改变了。
第二题也差不多修改的都是值传递进去的内容。所以不会改变。

看看这个相信你对指针和参数传递的理解会加深一点点。
coolguyXYZ
2011-02-13 · TA获得超过313个赞
知道小有建树答主
回答量:266
采纳率:0%
帮助的人:250万
展开全部
第一题
void f(int *p,int *q)
{ p=p+1;*q=*q+1;}
注意是p=p+1,不是*p=*p+1
所以不会改变*p的值,故不变。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LuciferMichae
2011-02-13 · 超过12用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:41万
展开全部
对于第一题f(r,&n)之后p=p+1。所以没有了实际值...而对于*p的值是n,而*p+1就是n+1成立了...因此输出1.3;
对于第二题void fun其实只是交换了指针的指向对于p.q都没有影响,所以只是在输出初值,输出了3.5.3.5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-02-13
展开全部
#include<stdio.h>
void f(int *p,int *q)
main()
{ int m=1,n=2,*r=&m;
f(r,&n); printf("%d,%d",m,n);
}
void f(int *p,int *q)
{ p=p+1;//这里是地址加1,不会改变所指单元的值,就是说永远不会改变实参的值
*q=*q+1;}
#include<stdio.h>
void fun(int *a,int *b)
{ int *c;
c=a;a=b;b=c;//这儿是交换地址,永远不会改变实参的值
}
main()
{ int x=3,y=5,*p=&x,*q=&y;
fun(p,q); printf("%d,%d",*p,*q);
fun(&x,&y); printf("%d,%d",*p,*q);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式