懂C语言的给我解释下这个指针程序??

#include<stdio.h>voidmain(){voids(int*p1,int*p2);inta=3,b=5;int*pointer_1,*pointer_2;... #include<stdio.h>
void main()
{
void s(int *p1,int *p2);int a=3,b=5;int *pointer_1,*pointer_2;
pointer_1=&a;pointer_2=&b;
if(a<b) s(pointer_1,pointer_2);
printf("%d,%d",a,b);
}
void s(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}我们今天初学指针,这个函数调用求a和b的大小。为什么定义的是void s(int *p1,int *p2),里面有*号;后面是if(a<b) s(pointer_1,pointer_2);不是if(a<b) s(*pointer_1,*pointer_2);
展开
 我来答
森然(华恋星尘之歌招2人)
2011-12-08 · TA获得超过786个赞
知道小有建树答主
回答量:348
采纳率:0%
帮助的人:338万
展开全部
对于这个问题,在声明过程中void s(int *p1,int *p2)只是表明有两个指向整形数据的指针.p1,p2的类型是int*型与pointer_1pointer_2相同。
在使用过程中,因为声明的是指向整形数据的指针,所以要用地址,不加*
这和声明;int *pointer_1,*pointer_2;而用pointer_1pointer_2相同
ycsxm
2011-12-08 · TA获得超过3.3万个赞
知道大有可为答主
回答量:1.4万
采纳率:0%
帮助的人:8580万
展开全部
交换两个变量值,就要涉及改变参数值,就必须“传址”,否则,参数传值没法互换。
既然传址,就要定义就要有 * ,pointer_1本来就是地址,所以,不能加*
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhao_24fly
2011-12-08
知道答主
回答量:14
采纳率:0%
帮助的人:11万
展开全部
pointer_1=&a;pointer_2=&b;意思是取a、b的地址,然后将a、b地址传过去,你不能将*p1看作一个参数,其实* 是一个操作符,对参数进行操作,就是取地址里面的值,实际上pointer_1-->p1、pointer_2-->p2。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式