永发信息网

为什么这个程序中函数调用结束后a和b的值改变了

答案:2  悬赏:80  手机版
解决时间 2021-06-04 18:50

swap( int* p1,int* p2 )
{
 int temp;
 temp = *p1;
 *p1 = *p2;
 *p2 = temp;
}

main()

{

int a,b;

int *pointer_1,*pointer_2;

scanf("%d,%d",&a,&b);

pointer_1=*a;pointer_2=&b;

if(a<b)swap(pointer_1,pointer_2);

printf("\n%d,%d\n",a,b);

}

1:不是值传递吗,既然是值传递,为什么a,b的值改变了?2:还有个疑问就是实参是pointer_1,pointer_2但是swap函数中的形参却是*p1,*p2,这是为什么?能说的详细点吗?或者是举个形象的例子。

谢谢。

最佳答案

pointer_1=*a;


貌似你这句话写错了。



确实是值传送,但你要搞清楚的是传的是什么值。


pointer_1存储的是变量a的地址。


调用swap后,创建了p1指针变量,


关键点是,然后把pointer_1的值,也就是a的地址复制给p1,这里确实是值传递。


但是这之后pointer_1和p1指向的都是a的地址,这样明白了吗?



你改变了p1指向的变量,也就是改变了变量a.


那么pointer_1读取出来的数据就是改变后的变量a的值。



能理解吗?

全部回答
pointer_1,pointer_2可以说是一个引用,他指向的是a,b的存储地址,用这个pointer_1=*a;pointer_2=&b; 把ab的地址引用传给pointer_1,pointer_2;而在swap中改变的也是指针地址指向的指向;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
西安区牡丹江鸿兴源文具食杂这个地址怎么能查
CD-ROM的光盘怎样才能使他变成可以修改的;
dnf鬼泣50级收什么装备好?
我微笑着走向生活赏析这篇短文的文章
梦见老家被大水淹了,之后好多龙从水飞了起来
华夏仓库问题
鲍鱼那里的最便宜,最好养最靓!
关于二级管整流的问题
现在建号让填的新手活动序号是啥意思啊?
虞城县商丘红红小酒家地址是什么,有没有知道
从湖北天门寄信到浙江嘉兴要好久呀?
零下气温对水准仪的使用有影响吗?
诛仙客户端用什么下载快啊?
女性尿HCG为阴性是什么意思?
正阳县驻马店石锅鱼地址在什么地方,想今天过
推荐资讯
请问QQ三国那个“国主的思念”活动,持续多久
女孩胸大有什么好?
邵阳县邵阳望梅殿哪位知道具体地址啊
方正S650N,自检后黑屏
天心区长沙理工大学3号教学楼地址有谁知道?
篮球中运球当中投篮老觉得别扭,应该怎么解决
想找个战地之王的群,北京的。
做人要有原则里面的原则是啥意思?举例说明一
我想开间网吧需要什么条件
FLASH怎么随着音乐进行逐帧编辑呢?
劲舞团改版后结婚派队的歌叫什么名字?
怎么退出校友群
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?