Преобразование в uintptr
Преобразование в uintptr позволяет получить целочисленное значение указателя.
Этот тип представляет собой целое число без знака, достаточно большое для хранения
адреса памяти. Преобразование выполняется с помощью явного приведения типа
uintptr(ptr), где ptr - указатель любого типа.
Важно помнить, что uintptr - это просто число, а не указатель,
и операции с ним не гарантируют безопасность работы с памятью.
Синтаксис
uintptr(pointer)
Пример
Давайте получим числовое значение указателя на целое число:
package main
import (
"fmt"
"unsafe"
)
func main() {
num := 42
ptr := &num
addr := uintptr(unsafe.Pointer(ptr))
fmt.Println(addr)
}
Результат выполнения кода:
"824633835104"
В результате мы получили числовой адрес переменной num в памяти.
Пример
Давайте выполним арифметические операции с адресом указателя:
package main
import (
"fmt"
"unsafe"
)
func main() {
arr := [3]int{10, 20, 30}
ptr := &arr[0]
addr := uintptr(unsafe.Pointer(ptr))
fmt.Println(addr)
nextAddr := addr + unsafe.Sizeof(arr[0])
nextPtr := (*int)(unsafe.Pointer(nextAddr))
fmt.Println(*nextPtr)
}
Результат выполнения кода:
"824633835104"
"20"
Мы получили адрес первого элемента, прибавили к нему размер элемента и получили указатель на следующий элемент массива.
Пример
Давайте сравним два указателя через их числовые значения:
package main
import (
"fmt"
"unsafe"
)
func main() {
a := 100
b := 200
ptrA := uintptr(unsafe.Pointer(&a))
ptrB := uintptr(unsafe.Pointer(&b))
if ptrA < ptrB {
fmt.Println("a находится по меньшему адресу")
} else {
fmt.Println("b находится по меньшему адресу")
}
}
Результат выполнения кода:
"b находится по меньшему адресу"
Мы сравнили числовые значения указателей и определили, какая переменная находится по меньшему адресу в памяти.
Смотрите также
-
преобразование
to-uintptr,
которое преобразует значение в тип uintptr -
преобразование
pointer-conversion,
которое описывает преобразования между указателями -
преобразование
to-uint,
которое преобразует значение в тип uint -
преобразование
to-int,
которое преобразует значение в тип int