A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ↖落葉下♀媃媚 中级黑马   /  2013-5-2 17:40  /  1800 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ↖落葉下♀媃媚 于 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

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 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
    }
  主要是你传参了后没有返回出任何结果!  

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
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

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
调用方法Test的时候,传参数val是将值复制了一份给方法中的参数val,
对方法中的参数val进行数据操作,与方法外的val没有任何关系,因此输入的结果是2。
:)

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张伟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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
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);

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马