C# 在C中传递二维数组的一维#
我从C搬到了C。 我有一个接受数组的函数。我想把二维数组的一维传递给这个函数 C代码为:-C# 在C中传递二维数组的一维#,c#,multidimensional-array,C#,Multidimensional Array,我从C搬到了C。 我有一个接受数组的函数。我想把二维数组的一维传递给这个函数 C代码为:- void array_processing(int * param); void main() { int Client_ID[3][50]; /* Some Processing which fills this array */ array_processing(&Client_ID[1]); } 现在,当我想在C#中执行同样的操作时,
void array_processing(int * param);
void main()
{
int Client_ID[3][50];
/* Some
Processing
which fills
this array */
array_processing(&Client_ID[1]);
}
现在,当我想在C#中执行同样的操作时,如何传递这个数组?
函数定义如下所示:-
private void array_processing(ref int[] param);
和数组将声明为:-
int[,] Client_ID = new int[3,50];
现在,我如何将客户机ID[1]
传递给函数数组处理()
通过执行array\u处理(ref Client\u ID[1])
将其称为“索引数错误” 只需声明方法
private void ParseArray(int[,] ar)
{
// Some work...
}
- UDP:代码格式
- 创建一个一维数组,并将二维行复制到该数组中
- 使用一个锯齿状数组-一个数组数组,这更像是C语言让你做的
- 具有一个数组\u处理重载,该重载接受一个2D数组和一个行号
- 如果确实希望以1D数组的形式访问2D行,则应创建一个“RowProxy”类,该类将实现IList接口,并允许您仅访问一行:
您可以使用row_5_访问器作为函数,class RowProxy<T>: IList<T> { public RowProxy(T[,] source, int row) { _source = source; _row = row; } public T this[int col] { get { return _source[_row, col]; } set { _source[_row, col] = value; } } private T[,] _source; private int _row; // Implement the rest of the IList interface }
将为您提供row_5_访问器(3)
ClientId[5,3]
- 你不能真的那样做。C#对其数组不太外向,并阻止您进行类似C的操作。这是一件好事
您有多种选择:
一种简单的方法是:
var dimNumber = 1;
int[] oneDimension = new int[50];
for(var i=0; i<50; i++)
{
oneDimension[i] = Client_ID[dimNumber][i];
}
array_processing ( ref oneDimension);
var-dimname=1;
int[]一维=新的int[50];
对于(var i=0;i,可以使用锯齿状数组
// Initialize jagged array
int[][] clientID = new int[3][];
for (int i=0; i<clientId.Length; i++)
{
clientId[i] = new int[50];
}
array_processing(ref clientId[1]);
您可以将数组声明为
int[][] Client_ID = new[] { new int[50], new int[50], new int[50] };
然后你可以把它传递给你的数组处理函数
array_processing(ref Clinet_ID[1]);
很抱歉,我的笔丢失了。对话晚了,但这里有一个锯齿状数组示例:
string[][] rows = GetStringArray(values);
string[] row = rows[0];
您可以设置锯齿阵列,如下所示:
// rowCount from runtime data
stringArray = new string[rowCount][];
for (int index = 0; index < rowCount; index++)
{
// columnCount from runtime data
stringArray[index] = new string[columnCount];
for (int index2 = 0; index2 < columnCount; index2++)
{
// value from runtime data
stringArray[index][index2] = value;
}
}
//运行时数据中的行数
stringArray=新字符串[rowCount][];
for(int index=0;index
他想传递一维而不是所有的矩阵,但我只想在函数中处理一维!在这种情况下,我需要编写像私有void ParseArray(int[,]ar,int dimension),然后传递ParseArray(ref Client_ID,1)对不起,那是周五晚上:)这样的代码,对于像我这样的新手来说,这已经超出了我的大脑!!我会一个接一个地尝试。。。。但这让我很失望。。。它就是不能通过多维数组!C岩石!!:)不,不,您可以毫无问题地传递多维数组。将多维数组视为向量是不可能的。另一方面,C语言中的任何东西都不能给你我的建议4和5的灵活性!!谢谢你,伙计!!是的,第四和第五真的很好!再次感谢@zmbq:你说“这是件好事”。为什么?用这种方式限制语法有什么好处?不安全的代码可以绕过这个问题吗?C多维数组非常混乱。如果您有一个3x3矩阵:inta[3][3]
,那么[2]的类型是什么?首先,多维数组不能声明为这个,我尝试了相同的方法,但它给出的错误是“错误的索引数”。我在问题中提到了这一点。对不起,我已经更改了声明,您可以使用上面的符号
string[][] rows = GetStringArray(values);
string[] row = rows[0];
// rowCount from runtime data
stringArray = new string[rowCount][];
for (int index = 0; index < rowCount; index++)
{
// columnCount from runtime data
stringArray[index] = new string[columnCount];
for (int index2 = 0; index2 < columnCount; index2++)
{
// value from runtime data
stringArray[index][index2] = value;
}
}