РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1546 of 1593 menu

Функция unsafe.SliceData

Функция unsafe.SliceData возвращает указатель на первый элемент базового массива, лежащего в основе слайса. В первый параметр функция принимает слайс любого типа, а возвращает значение типа unsafe.Pointer. Эта функция полезна при работе с низкоуровневыми операциями над памятью, где требуется прямой доступ к данным слайса без копирования.

Синтаксис

unsafe.SliceData(slice)

Пример

Давайте получим указатель на базовый массив слайса []int{1, 2, 3, 4, 5} и преобразуем его в указатель на первый элемент:

package main import ( "fmt" "unsafe" ) func main() { slice := []int{1, 2, 3, 4, 5} ptr := unsafe.SliceData(slice) intPtr := (*int)(ptr) fmt.Println(*intPtr) }

Результат выполнения кода:

1

Пример

Давайте изменим значение первого элемента слайса через указатель, полученный с помощью unsafe.SliceData:

package main import ( "fmt" "unsafe" ) func main() { slice := []string{"a", "b", "c", "d", "e"} ptr := unsafe.SliceData(slice) strPtr := (*string)(ptr) *strPtr = "z" fmt.Println(slice) }

Результат выполнения кода:

[z b c d e]

Пример

Давайте получим доступ ко второму элементу слайса, используя арифметику указателей и unsafe.SliceData:

package main import ( "fmt" "unsafe" ) func main() { slice := []int{1, 2, 3, 4, 5} ptr := unsafe.SliceData(slice) secondPtr := unsafe.Add(ptr, 8) intPtr := (*int)(secondPtr) fmt.Println(*intPtr) }

Результат выполнения кода:

2

Смотрите также

  • функцию unsafe.Pointer,
    которая представляет собой универсальный указатель для работы с памятью
  • функцию unsafe.Slice,
    которая создает слайс из указателя на базовый массив
  • функцию unsafe.Sizeof,
    которая возвращает размер значения в байтах
  • функцию unsafe.StringData,
    которая возвращает указатель на базовый массив строки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить