解答下面程序
答案:4 悬赏:0 手机版
解决时间 2021-08-17 08:12
- 提问者网友:ミ烙印ゝ
- 2021-08-16 18:56
程序里面 a b 换了位置 第一个输出 取*p*q 即 取 x y 的地址 也就是取a b的值 那为什么 最后的输出是3 5 35 而不是53 53呢、? 麻烦高手赐教、
最佳答案
- 五星知识达人网友:孤老序
- 2021-08-16 19:13
上面的程序如果按我们正常的思维是正确的,但c语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。不可能通过调用函数来改变实参指针变量的值,但可以改变指针变量所指变量的值。
故,子程序在全局来看无实际意义。
全部回答
- 1楼网友:荒野風
- 2021-08-16 22:19
这个问题有点复杂!
不管调用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);
……
}
}
}
- 2楼网友:渡鹤影
- 2021-08-16 20:53
http://bbs.hackfans.com.cn/?fromuser=Anqir 饭客网络,这里有专业的编程语言团队为您服务!!
- 3楼网友:狂恋
- 2021-08-16 19:51
出现这个问题的原因就是您的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();
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯