请问在C#里怎样获得一个二维数组没一行的首地址? 如题,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首元素地址:[STAThread]static unsafe void Main(string[] args){ int[,] matrix = new int[3,3]; fixed(int* pi = &matrix[0,0]) { Console.WriteLine("{0:X}", (uint)pi); } Console.ReadLine();}数组内的数据是顺序排列的,所以其他行的首地址可以偏移得到不过你要用这种代码做什么? 不必使用UNSAFE代码:/// <summary>/// 获取指定二维数组的某个元素的地址/// </summary>/// <param name="matrix">要检测的二维数组</param>/// <param name="row">二维数组的行号</param>/// <param name="col">二维数组的列号</param>/// <returns>指定元素的地址</returns>static int GetAddress(int[,] matrix, int row, int col){ int pos=(matrix.GetUpperBound(0)+1)*row+col; IntPtr ptr=System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(matrix, pos); return ptr.ToInt32();}示例:Console.WriteLine("{0:X}", GetAddress(matrix, 0,0)) @Brunhild():用Marshal类确实可以得到其地址。但由于数组是在GC堆上的,而GC会移动GC堆上的对象,所以要得到数组的地址并且使用,必须先固定它fixed{}代码块就是用于解决这个问题所以必须使用unsafe上下文,嗯 求一个C#定时FTP多线程下载文件的源码多谢了 如何得到与lable相对应的textbox的值? (求助)Crystal水晶报表发布问题! 求一复杂xml 序列化类! 到底有人会么?关于image控件和FileUpload控件联动的问题 求C#和ASP.NET的面试题目集!!!(最好附带答案的) 大家看看呀,是不是.net的bug;还是我缺了什么东西 求一正则表达式 如何获取listview 中一个组group中的所有项items c# 循环变量问题 dafeifei(大飞飞)进来!给分 原来的项目是用VS2002做的,现在用2003修改,可是有问题,何解?
[STAThread]
static unsafe void Main(string[] args)
{
int[,] matrix = new int[3,3];
fixed(int* pi = &matrix[0,0])
{
Console.WriteLine("{0:X}", (uint)pi);
} Console.ReadLine();
}数组内的数据是顺序排列的,所以其他行的首地址可以偏移得到不过你要用这种代码做什么?
/// <summary>
/// 获取指定二维数组的某个元素的地址
/// </summary>
/// <param name="matrix">要检测的二维数组</param>
/// <param name="row">二维数组的行号</param>
/// <param name="col">二维数组的列号</param>
/// <returns>指定元素的地址</returns>
static int GetAddress(int[,] matrix, int row, int col)
{
int pos=(matrix.GetUpperBound(0)+1)*row+col;
IntPtr ptr=System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(matrix, pos);
return ptr.ToInt32();
}示例:
Console.WriteLine("{0:X}", GetAddress(matrix, 0,0))
用Marshal类确实可以得到其地址。但由于数组是在GC堆上的,而GC会移动GC堆上的对象,所以要得到数组的地址并且使用,必须先固定它
fixed{}代码块就是用于解决这个问题所以必须使用unsafe上下文,嗯