tipo sume sumar que punteros puntero programacion programa por operaciones medio matrices los entero con como aritmetica apuntadores pointers go pointer-arithmetic

pointers - sume - la aritmética del puntero en go



punteros y matrices en c (1)

Teniendo en cuenta que puede (no se puede pensar en una excelente manera de ponerlo, pero) manipular punteros en golang, ¿es posible realizar la aritmética del puntero en golang como lo haría en C, digamos para iterar sobre una matriz? Sé que los bucles están bien para ese tipo de cosas en estos días, solo tengo curiosidad si es posible.


No. De las preguntas frecuentes de Go :

¿Por qué no hay aritmética de puntero?

La seguridad. Sin la aritmética del puntero es posible crear un lenguaje que nunca pueda derivar una dirección ilegal que tenga éxito incorrectamente. La tecnología del compilador y del hardware ha avanzado hasta el punto en que un ciclo que usa índices de matriz puede ser tan eficiente como un bucle usando la aritmética del puntero. Además, la falta de aritmética del puntero puede simplificar la implementación del recolector de basura.

Dicho esto, puede evitar esto utilizando el paquete unsafe , pero simplemente no :

package main import "fmt" import "unsafe" func main() { vals := []int{10, 20, 30, 40} start := unsafe.Pointer(&vals[0]) size := unsafe.Sizeof(int(0)) for i := 0; i < len(vals); i++ { item := *(*int)(unsafe.Pointer(uintptr(start) + size*uintptr(i))) fmt.Println(item) } }

https://play.golang.org/p/QCHEQqy6Lg