黑马程序员技术交流社区

标题: 输出问题 [打印本页]

作者: ↖落葉下♀媃媚    时间: 2013-5-2 17:40
标题: 输出问题
本帖最后由 ↖落葉下♀媃媚 于 2013-5-3 10:44 编辑

int val = 2;
            Test(val);
            Console.WriteLine(val);      
            Console.ReadKey();
        }
        static void Test(int val)
        {
            int temp = 10;
            val = temp * 20;
为什么输出结果是2
作者: HM邱刚权    时间: 2013-5-2 17:51
本帖最后由 HM邱刚权 于 2013-5-2 17:54 编辑

int val = 2;
      //      Test(val);
   // 在这里接受他的返回值
  int Number =Tset(val)

  //Console.WriteLine(val);  //这里输出错误了 他指向了你上面定义的VAL;
            Console.WriteLine(Number);  
            Console.ReadKey();
        }
        static intTest(int val) // 你若是要获取这个值你要返回出来
        {
            int temp = 10;
            val = temp * 20;
       retule  val
    }
  主要是你传参了后没有返回出任何结果!  
作者: 金辉    时间: 2013-5-2 18:42
nt val = 2;
            Test(val);
            Console.WriteLine(val);      
            Console.ReadKey();
        }
        static void Test(int val)
        {
            int temp = 10;
            val = temp * 20;//这里的val是局部变量,只在Test()方法里面有效,你上面传下来的只是2,并不是上面定义的val,所以当Test()方法结束
//时val被释放,在上面 Test(val);之后输出的还是第一次定义的val,所以等于2
作者: 陈晖    时间: 2013-5-2 19:21
调用方法Test的时候,传参数val是将值复制了一份给方法中的参数val,
对方法中的参数val进行数据操作,与方法外的val没有任何关系,因此输入的结果是2。
:)
作者: 张伟86    时间: 2013-5-2 22:14
本帖最后由 张伟86 于 2013-5-2 22:16 编辑

因为在你的test函数中,使用的是值复制。即你在test函数中新定义了一个int val,并将main函数中的val值传递给test中这个新建的val,在此之后test中的val就于main函数中的val没有了半毛钱关系;所以在test函数调用完成时,test中的val销毁了,而main函数中的val并没有预料般改变。
你的本意应该要在调用test函数后改变val的值,这时候可以改变函数返回值,return返回需要的数值;或者使用引用类型。引用类型可以使用ref和out关键字,ref在调用前需要初始化,而out不需要。具体代码如下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace ConsoleApplication3
  6. {
  7.     class Person
  8.     {
  9.         public
  10.             int Age;
  11.     }
  12.     class Program
  13.     {
  14.         static void Main(string[] args)
  15.         {
  16.             int refval = 2;
  17.             refTest(ref refval);
  18.             int outval = 2;
  19.             outTest(out outval);
  20.             Console.WriteLine(refval);
  21.             Console.WriteLine(outval);
  22.             Console.ReadKey();
  23.         }
  24.         static void refTest(ref int val)
  25.         {
  26.             int temp = 10;
  27.             val = temp * 20;
  28.         }
  29.         static void outTest(out int val)
  30.         {
  31.             int temp = 10;
  32.             val = temp * 20;
  33.         }
  34.     }
  35. }
复制代码

作者: 闫常国    时间: 2013-5-2 22:28
static void Test(int val)
         {
             int temp = 10;
             val = temp * 20;
         }
这里是值传递,所以原来定义的val的值不会发生改变,要想改变val的值就要在参数列表里加上ref或out
static void Test(ref int val)
         {
             int temp = 10;
             val = temp * 20;
         }
在调用方法时也要加上ref
Test(ref val);




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2