在调用子程序过程中,我们有如下语句:
    void  FA()
    {
          int  gr[100]={....};
          int  gb[10];          FB(&gr[5], gb, 10);
     }
     void  FB(int *a, int *b, int n)
    {
        int i;
        for(i=0; i<n; i++) b[i]=a[i];
    }  在C#如何实现啊,这样类似指针与数组地址直接转化功能?

解决方案 »

  1.   


    void FB(ref int[] a,out int[] b,int)
    {
      int i;
      for(i=0; i<n; i++) b[i]=a[i];
    }调用
    FB(ref 数组,out 数组,10)
      

  2.   

    为什么一定要用指针可以建第二个数组是从第一个数组的第5个元素开始的啊
    然后你就可以for了
      

  3.   

    请参考MSDN:
    http://msdn.microsoft.com/zh-cn/library/t2yzs44b.aspx
      

  4.   

    使用参数数组public static int Min(params int[] paramList()
    {
        //Do
    }
      

  5.   

            private void Form1_Load(object sender, EventArgs e)
            {
                int[] gr = new int[] { 3, 55, 0, 68, 12,2,3,3,5 };
                int[] gb = new int[] { 13, 2, 1, 8, 9 };
                unsafe
                {
                    fixed (int* a =&gr[2])
                    {
                        fixed (int* b = &gb[0])
                        {
                            fb(a, b, 4);
                        }
                    }
                }            fb1(ref gb[0],ref gr[2], 4);
            }        //method 1
           unsafe void fb(int* a, int* b, int n)
            {
                for (int i = 0; i < n; i++)
                {
                    b[i] = a[i];
                }
            }        //method2
            void fb1(ref int a, ref int b, int n)
            {
                unsafe
                {
                    fixed (int* a1 = &a)
                    {
                        fixed (int* b1 = &b)
                        {
                            for (int i = 0; i < n; i++)
                            {
                                *(b1+i) = *(a1+i);
                            }
                        }
                    }            }
            }
      

  6.   

    项目属性打开unsafe开关。private unsafe void TestArray()
    {
        int[] gr = new int[100];
        int[] gb = new int[10];
        fixed (int* r = &gr[5])
        {
            fixed (int* b = &gb[0])
            {
                FB(r, b, 10);
            }
        }            
    }unsafe void FB(int* a, int* b, int n)
    {
        int i;
        for (i = 0; i < n; i++) b[i] = a[i];
    }
      

  7.   


    private unsafe void TestArray()
    {
        int[] gr = new int[100];
        for (int i = 0; i < gr.Length; i++) gr[i] = i;
        int[] gb = new int[10];    int tick = Environment.TickCount;
        for (int i = 0; i < 50000000; i++)
        {
            fixed (int* r = &gr[5])
            {
                fixed (int* b = &gb[0])
                {
                    FB(r, b, 10);
                }
            }
        }
        tick = Environment.TickCount - tick;
        for (int i = 0; i < 50000000; i++)
        {
            Array.Copy(gr, gb, 10);
        }
        int tick2 = Environment.TickCount;    tick2 = Environment.TickCount - tick2;    //tick : 4094 ms
        //tick2: 0ms
        MessageBox.Show(tick.ToString()+"\r\n"+tick2.ToString());
    }unsafe void FB(int* a, int* b, int n)
    {
        int i;
        for (i = 0; i < n; i++) b[i] = a[i];
    }
    楼主,这样做一点好处都没有,还是用系统的Array.Copy快。
      

  8.   

    避免函数调用。直接写进来。依然是慢。没函数调用。稍微快了1秒。
            private unsafe void TestArray()
            {
                int[] gr = new int[100];
                for (int i = 0; i < gr.Length; i++) gr[i] = i;
                int[] gb = new int[10];            int tick = Environment.TickCount;
                for (int i = 0; i < 50000000; i++)
                {
                    fixed (int* r = &gr[5])
                    {
                        fixed (int* b = &gb[0])
                        {
                            for (int j = 0; j < 10; j++) b[j] = r[j];
                            //FB(r, b, 10);
                        }
                    }
                }
                tick = Environment.TickCount - tick;
                for (int i = 0; i < 50000000; i++)
                {
                    Array.Copy(gr, gb, 10);
                }
                int tick2 = Environment.TickCount;            tick2 = Environment.TickCount - tick2;            //tick : 3152 ms
                //tick2: 0ms
                MessageBox.Show(tick.ToString() + "\r\n" + tick2.ToString());
            }        unsafe void FB(int* a, int* b, int n)
            {
                int i;
                for (i = 0; i < n; i++) b[i] = a[i];
            }