C#2D指针数组

时间:2016-12-12 04:31:12

标签: c# arrays pointers

我目前正在搞乱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#中的类似行为?

干杯。

2 个答案:

答案 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 KeywordOut keyword将参数作为参考传递。

当您使用指针时,您将失去所有托管代码的好处。

您可以查看C# ref is it like a pointer in C/C++

除此之外,我认为所有数组都已经是引用类型,即使它包含值类型的所有成员。

在C#中查看Value Types and Reference Types

我希望它有所帮助。