C#中的string[][]和string[,]有啥区别[重复]
Posted
技术标签:
【中文标题】C#中的string[][]和string[,]有啥区别[重复]【英文标题】:What is the difference between string[][] and string[,] in C# [duplicate]C#中的string[][]和string[,]有什么区别[重复] 【发布时间】:2016-05-17 02:00:49 【问题描述】:语法略有不同,但它们之间有什么区别。
public static string[][] str1 = new string[] Total, "N2" ;
public static string[,] str2 = Total, "N2" ;
每个的使用指南是什么?
【问题讨论】:
第一个是“锯齿状”——一个数组引用数组。 看看这个answer。 【参考方案1】:看看这里: https://msdn.microsoft.com/en-us/library/2s05feca.aspx
基本上,区别在于内存的分配方式。 [,] 符号将在一个块中分配所有需要的内存,而 [][] 符号将分配一个指向数组的指针数组,其中每个数组是单独分配的,不一定与其他数组相邻
【讨论】:
同时检查Arrays “数组的指针数组” - 这取决于它的使用方式 - 元素可能是unitialised。此外,在 c# 中,术语“指针”并不常用,也不应该是 reference 的同义词。 "A jagged array is an array of arrays, and therefore its elements are reference types and are initialized to null"【参考方案2】:在你引用的例子中:
public static string[][] str1 = new string[] Total, "N2" ;
public static string[,] str2 = Total, "N2" ;
第一个是数组数组(Jagged Array)。每个条目都可以指向一个字符串数组。
第二个是普通的二维数组(多维数组)。
【讨论】:
【参考方案3】:简而言之,[,] 是一个一次性分配的二维数组,而 [][] 是一个数组数组,因此内存分配是渐进的——初始化语法(如您所指出的)也不同。
另一个重要的区别是,在 [][] 类型中,您可以定义不同大小的每个“行”。在 [,] 中无法做到这一点,这在某种程度上是矩阵的 C# 表示。
【讨论】:
以上是关于C#中的string[][]和string[,]有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章