如果我们没有显式传递数组的大小,数组在哪里被初始化?
Posted
技术标签:
【中文标题】如果我们没有显式传递数组的大小,数组在哪里被初始化?【英文标题】:Where do the Array gets initialized if we do not pass the size of the array explicitly? 【发布时间】:2020-10-10 19:28:03 【问题描述】:我是编程新手。在学习数据结构 Array 的过程中,我了解到我们必须在创建数组的同时使用大小初始化数组。但我还在我用来学习编码的一个网站上看到了一个代码 sn-p。代码如下
int[] ar = Array.ConvertAll(Console.ReadLine().Split(' '), arTemp => Convert.ToInt32(arTemp))
我猜代码是从控制台读取输入(这是一个字符串)并将其拆分为子字符串,然后转换为整数数组并存储在'ar'中。
我的问题是这一行没有错误。但是在使用它们之前没有提到数组大小。那个怎么样?在这种情况下,这个数组的大小在哪里被初始化?
【问题讨论】:
您对代码的描述是正确的。数组大小为Split
返回的数组大小。
【参考方案1】:
From MSDN:
Array.ConvertAll()
:将一种类型的数组转换为另一种类型的数组。
在这种情况下,这个数组的大小在哪里被初始化?
在Array.ConvertAll()
静态函数中,大小数组基于您的输入数组。
在您的情况下,输入数组是Console.ReadLine().Split(' ')
。 Split(' ')
返回一个 array 空格分隔的单词。 这个数组的大小被分配给Array.ConvertAll()
函数的输出
int[] ar = Array.ConvertAll(Console.ReadLine().Split(' '), arTemp => Convert.ToInt32(arTemp))
//+ +++++++++++++ ++++++++++++++++++++++++ ++++++
//| | | |
//| | | + Integer convertor
//| | |
//| | + Input array with it's size
//| |
//| + Converting input array to array of type int
//|
//+ Output integer array
【讨论】:
【参考方案2】:int ar 是对数组的引用。数组大小在运行时确定。 Array.ConvertAll(...) 返回一个数组,即实际对象。这个新创建的数组链接到 ar 变量。
【讨论】:
以上是关于如果我们没有显式传递数组的大小,数组在哪里被初始化?的主要内容,如果未能解决你的问题,请参考以下文章
C 语言数组 ( 数组本质 | 数组长度定义 | 数组初始化 | 编译时初始化 | 显式初始化 - 重置内存 )