static void Main(string[] args)
        {
            int i = 0;
            int[] ss={0,1,2,3};
            So (ss,i );
            Console.WriteLine (ss[0] );
            Console.WriteLine(i);         }
        public static void So(int[] ss, int i)
        {
        ss[0]=1000;
            i=1000;
        }
谁教教我 为什么 调用后 i的值为0 而是不为1000啊??

解决方案 »

  1.   

    你这是传值和传引用的问题了。
    int 类型是值型,你传过去的只是一个拷贝,所以原值不能被修改。
    但是数组时引用类型,,
    输出结果是:1000,0
    你要想它改变就加个ref       static void Main(string[] args) 
            { 
                int i = 0; 
                int[] ss={0,1,2,3}; 
                So (ss,ref i ); 
                Console.WriteLine (ss[0] ); 
                Console.WriteLine(i);         } 
            public static void So(int[] ss,ref int i) 
            { 
            ss[0]=1000; 
                i=1000; 
            } 
      

  2.   

    你没搞懂各个类型的内存分配,int型是值类型,不是引用类型,是传递了一个副本,而不是传递的内存地址
      

  3.   

    ref或者out
    ref在使用前,变量得赋值
    out在使用变量前,不用赋值
      

  4.   

    这是string或者int类型
    如果是Array或者ArrayList、DataTable等类型,你这个写法就是正确的
      

  5.   

    二楼说得对,引用类型和值类型是有区别的,引用类型有,ref,out关键字.有输入输出就用ref,只有输出没有输入就用out.