鱼C论坛

 找回密码
 立即注册
查看: 2779|回复: 3

求解读这段代码

[复制链接]
发表于 2019-7-24 10:25:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void swap(int x, int y)
      {
         int temp;
         
         temp = x; /* 保存 x 的值 */
         x = y;    /* 把 y 赋值给 x */
         y = temp; /* 把 temp 赋值给 y */
      }
     
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         /* 局部变量定义 */
         int a = 100;
         int b = 200;
         
         Console.WriteLine("在交换之前,a 的值: {0}", a);
         Console.WriteLine("在交换之前,b 的值: {0}", b);
         
         /* 调用函数来交换值 */
         n.swap(a, b);
         
         Console.WriteLine("在交换之后,a 的值: {0}", a);
         Console.WriteLine("在交换之后,b 的值: {0}", b);
         
         Console.ReadLine();
      }
   }
}

在交换之前,a 的值:100
在交换之前,b 的值:200
在交换之后,a 的值:100
在交换之后,b 的值:200


为何交换之后a、b的值还是不变??
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-4 12:14:18 | 显示全部楼层

回帖奖励 +10 鱼币

围观一下,也不太懂……
是不是因为只是修改了局域变量里的值,而没有传递回来?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 16:43:29 | 显示全部楼层
  1. using System;
  2. namespace CalculatorApplication
  3. {
  4.     class NumberManipulator
  5.     {
  6.         public void swap(ref int x,ref  int y)
  7.         {
  8.             int temp;

  9.             temp = x; /* 保存 x 的值 */
  10.             x = y;    /* 把 y 赋值给 x */
  11.             y = temp; /* 把 temp 赋值给 y */
  12.         }

  13.         static void Main(string[] args)
  14.         {
  15.             NumberManipulator n = new NumberManipulator();
  16.             /* 局部变量定义 */
  17.             int a = 100;
  18.             int b = 200;

  19.             Console.WriteLine("在交换之前,a 的值: {0}", a);
  20.             Console.WriteLine("在交换之前,b 的值: {0}", b);

  21.             /* 调用函数来交换值 */
  22.             n.swap(ref a, ref b);

  23.             Console.WriteLine("在交换之后,a 的值: {0}", a);
  24.             Console.WriteLine("在交换之后,b 的值: {0}", b);

  25.             Console.ReadLine();
  26.         }
  27.     }
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-8 22:52:07 | 显示全部楼层
函数调用时,你的代码中为按值传递,并未改变a ,b本身。
ref为按引用传递参数,3楼代码应该没问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 02:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表