永发信息网

C语言,这样为什么不可以实现两个数值的交换?

答案:7  悬赏:0  手机版
解决时间 2021-11-07 04:39
  • 提问者网友:浩歌待明月
  • 2021-11-06 12:48
C语言,这样为什么不可以实现两个数值的交换?
最佳答案
  • 五星知识达人网友:末日狂欢
  • 2021-11-06 13:14
因为在swap函数中,a b的地址和x y的地址不同,其变化与X y本身无关,如果要交换,需要把x y的地址传到子函数中,进行交换!
 #include
  void swap(int *a ,int *b )
  {
  
           int temp;
           temp=*a;
           *a=*b;
           *b=temp;
   }      
 int main()
 {
         int x=3;
         int y=4;
         swap(&x, &y);
         printf("%d%d",x,y);


 }

全部回答
  • 1楼网友:舍身薄凉客
  • 2021-11-06 18:49
你调用函数是采用传值方式,将x y的值传递过去,但是x y却并未发生改变
要想改变,建议传地址,用指针交换

ab你可以看做是xy的复制品
  • 2楼网友:煞尾
  • 2021-11-06 17:22
普通的非引用类型的参数通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值。
对于你这个程序,在执行swap时,只交换了实参的局部副本,而传递给swap的实参并没有被修改。
  • 3楼网友:人间朝暮
  • 2021-11-06 16:45
简单一点说,就是函数传递的时候有几种传递方式,一种是值传递,一种是引用传递,一种是地址传递.你这里是值传递方式.也就是说,传递进去的只是实参的一个拷贝.拷贝只是局部变量,当子程序返回时,就会被析构.所以,实参并没有被改变
void swap(int& a ,int& b )可以改为这样,(引用传递)

void swap(int* a,int* b)或者这样,(地址传递)
  • 4楼网友:毛毛
  • 2021-11-06 16:29
用void swap(int& a,int& b)就可以
形参是你调用函数时候创建的临时变量,函数结束该变量就被丢弃了
  • 5楼网友:酒者煙囻
  • 2021-11-06 14:57
这样的实现相当于实参给形参赋值,形参是子函数中的变量,他与实参完全没有关系,在子函数中实现了两个形参的值进行互换,对实参无影响
若想实现实参的值互换,则可把形参类型改为指针或者引用,这样操作形参,即是操作实参。
  • 6楼网友:从此江山别
  • 2021-11-06 14:18
因为在swap函数中,a b是x y的数据复制品,其变化与X y本身无关,如果要交换,需要传递x y的地址到子函数中,进行交换!
1 #include
2 void swap(int *a ,int *b )
3 {
4
5 int temp;
6 temp=*a;
7 *a=*b;
8 *b=temp;
9 }
10 int main()
11 {
12 int x=3;
13 int y=4;
14 swap(&x, &y);
15 printf("%d%d",x,y);
16 }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯