在调用子程序过程中,我们有如下语句:
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#如何实现啊,这样类似指针与数组地址直接转化功能?
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#如何实现啊,这样类似指针与数组地址直接转化功能?
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)
然后你就可以for了
http://msdn.microsoft.com/zh-cn/library/t2yzs44b.aspx
{
//Do
}
{
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);
}
}
} }
}
{
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];
}
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快。
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];
}