我目前正在搞乱C#,以便能够以可接受的知识库接近ASP.NET。为了做到这一点,我偶尔会看看我的旧C ++代码,看看我是否能弄清楚如何使它在C#中运行。
所以我想我将研究数组,这是一种存储数据的常用方法。我想知道的是,C#相当于通过指针创建二维数组会是什么样子?
我知道在C ++中,一种方法可以是这样的:
double **myArray;
myArray = new double * [rows];
for(int I = 0; I < rows; I++) {
myArray[I] = new double[cols];
}
我也知道在C#中你可以很容易地说双[row,cols]并创建一个2D数组。我知道C ++和C#最有可能以不同的方式对待指针,但仅仅是为了感兴趣,我将如何模仿C#中的类似行为?
干杯。
答案 0 :(得分:1)
C#数组和C ++指针非常相似,最大的区别在于C#在数组数据之上有一层托管逻辑。
C#中的指针数组是可能的。你可以这样做,例如:
unsafe
{
double*[] ptrArray = new double*[5];
ptrArray[2][0] = 4.0;
double*[,] ptr2DArray = new double*[5,5];
ptr2DArray [2, 2][0] = 4.0;
}
但是,就像我在之前的评论中所说的那样,不鼓励在C#中使用指针,并且通常您希望尽可能使用托管方法。就个人而言,我无法理解创建指针数组的需要(更不用说2D数组)了,我想如果有人的程序需要这样的结构,那么他们可能需要重新考虑他们的方法。
答案 1 :(得分:0)
通常指针在C#中的使用非常少,当你在C#中使用指针时,它被认为是不安全的上下文。
请查看说明如何使用指针的MSDN Pointer Document。
我想说如果不需要,请不要使用指针。您可以使用Ref Keyword和Out keyword将参数作为参考传递。
当您使用指针时,您将失去所有托管代码的好处。
您可以查看C# ref is it like a pointer in C/C++。
除此之外,我认为所有数组都已经是引用类型,即使它包含值类型的所有成员。
在C#中查看Value Types and Reference Types。
我希望它有所帮助。