永发信息网

解答下面程序

答案:4  悬赏:0  手机版
解决时间 2021-08-17 08:12
程序里面 a b  换了位置  第一个输出 取*p*q  即 取 x y  的地址 也就是取a b的值 那为什么 最后的输出是3 5 35 而不是53 53呢、? 麻烦高手赐教、 
最佳答案

上面的程序如果按我们正常的思维是正确的,但c语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。不可能通过调用函数来改变实参指针变量的值,但可以改变指针变量所指变量的值。


故,子程序在全局来看无实际意义。

全部回答

这个问题有点复杂!

不管调用fun(p,q)还是调用fun(&x,&y)当参数传进去的时候

*a和*b都只是栈中创建的副本!

当你执行指针交换的时候在函数反回之前也就是函数内是有郊的

但是函数反回栈中*a,*b都被释放了

你所做的操作都等于白做了!

最好的方法是用指象指针的指针

例:

void fun(void** a,void **b)

{

    int *c;

    c=*a;

    *a=*b;

    *b=*c;

}

调用的时候这样写

main()

{

    int x=3,y=5;*p=&x,*q=&y;

    fun(&p,&q);

    ……

}

   

}

}

http://bbs.hackfans.com.cn/?fromuser=Anqir 饭客网络,这里有专业的编程语言团队为您服务!!
出现这个问题的原因就是您的fun函数没有实现交换。我修改了下。就能达到您的效果了。 您先自己理解一下吧。 #include<stdio.h> void fun(int *a ,int *b) {      int *c;      c=*a;*a=*b;*b=c; } int main() {     int x=3,y=5,*p=&x,*q=&y;     fun(&p,&q);printf("%d,%d,",*p,*q);     fun(&x,&y);printf("%d,%d\n",*p,*q);     getch(); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
(相信我,不会让你失望)。的英语解答。
决定了就不后悔的语录,要么做做了就不要后悔
江西省吉安市泰河县是以石膏粉为主吗
QQ幻想世界坐骑大全?
关于军校招生问题
怎么洗牛仔裤,牛仔裤怎么洗 多久洗一次好
叶县平顶山全通货运地址在哪里啊
为什么我晚上睡不着,白天却特别能睡?
冬季来了,要向上级申请购买空调报告怎么写啊
谁能告诉我思念是什么味道?
QQ爱墙图标怎么开!?
DNF号被封了有快速解封的方法吗?
QQ飞车 B车 方程式 有啥特点 好用么
我特别的想知道这是谁..
创维29TI9000(29TI90-P02549240机芯)高压包型
推荐资讯
建完舞团为什么没有团
谁种的牵牛花,养的喜鹊?
谁有绯雨倾城的全文和番外?
中博工矿机械有限公司生产的产品质量好吗?
爱情离开的伤心的句子,歌词你离开的时候,有
千钧一发英雄升级什么办法最快
梦幻西游瓜子几小时成熟
想取消上网怎么办啊。
思, 怎么办
想买款2000以内的数码相机,家庭用,帮我推荐
呼兰区哈尔滨十一面馆在什么地方啊,我要过去
爱组词三个字()()爱,要是领导爱民众的,()(
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?