Указатель ссылается на местоположение в памяти. Насколько я понимаю, все адреса памяти имеют одинаковый тип независимо от типа переменной.В чем разница между разными типами указателей?
Вместо использования разных указателей (*int
, *string
и т. Д.), Возможно ли это использование только одного типа (var p pointer
) для всех типов указателей?
В чем разница между различными типами указателей?
package main
import "fmt"
func main() {
i := 5
s := "abc"
var pi *int // alternatively var pi pointer
var ps *string // alternatively var ps pointer
pi = &i
ps = &s
fmt.Printf("%p %p", pi, ps) // result is 0x1040e0f8 0x1040a120
}
Благодарим за сообщение. Но это объяснение далеко от меня из-за моей нехватки информации. Указатель относится к памяти, которая представлена как 32-битная или 64-битная int. Это верно ?. Если эта информация верна, почему мы используем разные типы указателей, относящиеся к типу переменной? Если эта информация неверна, каково различие между различными типами указателей? –
@AliAltun прежде всего, один из ключевых моментов состоит в том, что если все указатели были одинаковыми, вы потеряете информацию о типе и сделаете язык намного менее эффективным и менее безопасным. Вы не хотели бы, чтобы функция, принимающая '* int', принимала' * float', или вы теряете одно из ключевых преимуществ статически типизированных языков. –