Зачем мы инициализируем размер массива, если можно добавлять элементы больше размера? - PullRequest
0 голосов
/ 18 июня 2020

Я спокойно новичок в программировании. Итак, я где-то читал, что мы должны инициализировать массив размером, иначе будет выдана ошибка компиляции. Итак, в приведенном ниже коде я инициализировал массив размером 3, это означает, что в массиве можно хранить только 3 элемента, верно? начиная с 0 до 2. но когда я запускаю код и по ошибке я ввел 4 цифры, разделенные пробелом, в качестве входных данных. Я ожидал, что индекс выходит за пределы исключения, но, к моему удивлению, ошибок не было, и когда я попытался вывести цифры массива в консоль, все 4 цифры были напечатаны. Как это вообще возможно?

int[] arr = new int[3];
            arr = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToArray();

Я даже хочу знать, есть ли такой же способ чтения многомерного массива с LINQ, как указано выше.

Заранее спасибо !!!

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Вы выделили еще один отдельный кусок памяти, исходный массив из 3 выходит за рамки

Enumerable.ToArray (IEnumerable) Метод

Создает массив из IEnumerable<T>.

Это то же самое, что и это.

var arr = new int[3]; // allocate
arr = new int[4]; // allocate again to same variable, which points to new memory

Исходное выделение выходит за рамки

Это просто путь ссылки работают в. net, когда вы создаете массив, вы где-то выделяете часть памяти, и ваша переменная ссылается на эту часть памяти. Когда вы назначаете новый экземпляр этой переменной, вы создаете новую часть памяти где-то еще, и ваша переменная берет эту ссылку на новую память.

0 голосов
/ 18 июня 2020

потому что метод ToArray копирует элементы из списка в новый массив.

...