如果我们没有显式传递数组的大小,数组在哪里被初始化?

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 语言数组 ( 数组本质 | 数组长度定义 | 数组初始化 | 编译时初始化 | 显式初始化 - 重置内存 )

Golang Slice 总结

8. 第 8 章 数组

数组适配器中的 get count() 如何在不显式返回数组大小的情况下返回值?

java 怎样传递数组对象