【问题标题】:C# 2D pointer arrayC# 二维指针数组
【发布时间】:2017-04-26 22:18:08
【问题描述】:

我目前正在使用 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# 中,您可以轻松地说 double [rows,cols],这将创建一个 2D 数组。我知道 C++ 和 C# 很可能以不同的方式处理指针,但只是为了感兴趣,我将如何在 C# 中模仿类似的行为?

干杯。

【问题讨论】:

  • C# 中的经验法则是永远不要使用指针,除非您有充分的理由这样做。你想用这个来完成什么?
  • 不知道为什么是-1,哦,好吧。除了加深我的知识之外,我真的什么也做不了。为知识而知识。有时我喜欢尝试将我的旧 C++ 或至少尝试转换为 C# 代码。所以我想知道这是否可能。

标签: c# arrays pointers


【解决方案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# 中使用指针,通常您希望尽可能使用托管方法。就个人而言,我无法理解创建指针数组(更不用说二维数组)的必要性,我想如果某人的程序需要这样的结构,那么他们可能需要重新考虑他们的方法。

【讨论】:

  • 明白了,回复。
【解决方案2】:

通常指针在 C# 中很少使用,当您在 C# 中使用指针时,它被认为是不安全的上下文。

请查看以下说明如何使用指针的MSDN Pointer Document

我想说,如果不需要,不要使用指针。您可以使用Ref KeywordOut keyword 将您的参数作为参考传递。

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

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

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

在 C# 中检查 Value Types and Reference Types

希望对你有帮助。

【讨论】:

  • 出于好奇,通过引用传递项目时 & 和 ref 之间是否存在显着差异?
  • @SomeStudent 类型和对象在 CLR 中的处理和传递方式存在一些细微差别,但实际上并非如此。
猜你喜欢
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
  • 2016-05-08
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多