Что такое массив значений? - PullRequest
2 голосов
/ 27 июня 2010

В C идея массива очень проста - просто указатель на первый элемент в строке элементов в памяти, доступ к которому можно получить с помощью арифметики указателей / стандартного синтаксиса array[i].

Однако в таких языках, как Google Go, «массивы - это значения», а не указатели. Что это значит? Как это реализовано?

Ответы [ 3 ]

1 голос
/ 27 июня 2010

В большинстве случаев они совпадают с массивами C, но компилятор / интерпретатор скрывает указатель от вас. Это происходит главным образом потому, что тогда массив может быть перемещен в память полностью прозрачным способом, и поэтому такие массивы могут иметь возможность изменения размера.
С другой стороны, это безопаснее, потому что без возможности перемещать указатели вы не сможете произвести утечку.

0 голосов
/ 10 августа 2012

С тех пор (2010) статья Ломтики: использование и внутреннее оборудование немного более точна:

Представление [4] int в памяти - всего четырецелочисленные значения выкладываются последовательно:

array in Go

Массивы Go являются значениями.
Переменная массива обозначает весь массив;это не указатель на первый элемент массива (как в случае с C).
Это означает, что когда вы присваиваете или передаете значение массива, вы делаете копию его содержимого.(Чтобы избежать копирования, вы можете передать указатель на массив, но тогда это указатель на массив, а не на массив.)
Один из способов думать о массивах - это что-то вроде struct, но синдексированные, а не именованные поля: составное значение фиксированного размера .

0 голосов
/ 27 августа 2010

Массивы в Go также являются значениями в том смысле, что они передаются в качестве значений функциям (таким же образом, как int, строки, числа с плавающей точкой и т. Д.), Что требует копирования всего массива для каждого вызова функции.быть очень медленным для большого массива, поэтому в большинстве случаев лучше использовать слайсы

...