private double []aaa()
{
   b = new double [12];
....
   return b;
}
我知道,在C语言里,这样做是不对的。
请问:C#里这么做有问题吗?
如果想返回数组,只能这样做吗?
private double []aaa(ref double []b)
{
 }
谢谢!

解决方案 »

  1.   

    private double[] aaa() 

      double b = new double [12]; 
       //.... 
      return b; 
    } 没问题啊.调用:double[] d=aaa();
      

  2.   


    //方法有很多种,如,(一般用集合或键值对的居多)
    double[] b = new double[12];
    private void aaa(out double[] b) 
    {  
       //.... 

      

  3.   


    private double[]/*返回值类型为double数组*/ getArray()
    {
       double[] arr = new double[12];//声明double类型数组
       return arr;//返回
    }
      

  4.   

    数组本身就是引用的using System;
    using System.Collections.Generic;
    using System.Text;namespace CAArray1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] a ={ 3, 5, 7, 9 };
                HandleArray(a);
                for (int i = 0; i < a.Length; i++)
                {
                    Console.WriteLine(a[i]);
                }
                Console.ReadKey();
            }        static void HandleArray(int[] b)
            {
                for (int i = 0; i < b.Length; i++)
                {
                    if (i % 2 == 0) b[i] += 1;
                }
            }
        }
    }
    上面的代码输入的是
    4
    5
    8
    9
      

  5.   

    C语言里,由于指针在子程序里声明,空间在子程序内申请,一般说来应该在子程序内free掉,其作用域在子程序内。所以说有隐患。
    类似的,C#也有作用域的问题,数组在子程序内申明,在子程序返回时应该自动回收内存的。所以直接返回在子程序内申明的数组似乎有问题,即使运行的结果正确。
    实际上,C#返回的就是一个指针,子程序完成后,该指针所指的空间应该自动回收了。不知道我的理解对不对?
    想确认一下各位高手的看法:到底这样返回数组是否存在隐患?
      

  6.   

    如果你觉可以类似数组的话建议你用List<T>,绝对没有问题
      

  7.   

    不太对。你应该好好的看下C语言和C#语言对内存管理的原理。
    看下托管C++(Managed C++)或者C++ CLI语言,应该就能对复杂的内存管理有印象了
    栈、堆、托管堆这三个东西要分清然后注意C、C++本质上都是拷贝传值而C#分值类型和引用类型分开处理不难,但要想清楚了