Aula 18 – Tutorial Golang – Ponteiros

Aula 18 – Tutorial Golang – Ponteiros

Tutorial Golang - Ponteiros

Tutorial Golang – Ponteiros

Página principal do blog

Todas as aulas desse curso

Aula 17                        Aula 19

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook

Esse é o link do código fluente no Pinterest

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Melhore seu NETWORKING

https://digitalinnovation.one/

Participe de comunidades de desenvolvedores:

Fiquem a vontade para me adicionar ao linkedin.

E também para me seguir no https://github.com/toticavalcanti.

Código final da aula:

https://github.com/toticavalcanti

Toti:

https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA

Backing track / Play-along:

https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA

Código Fluente

https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w

Putz!

https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw

PIX para doações

PIX Nubank

PIX Nubank

Se quiser copiar o código do PIX:

00020126580014BR.GOV.BCB.PIX013643c5f950-535b-4658-b91f-1f1d135fe4105204000053039865802BR5925Antonio Cavalcante de Pau6009SAO PAULO61080540900062070503***6304946B


Aula 18 – Tutorial Golang – Ponteiros

Ponteiros

Go oferece suporte a ponteiros, permitindo que você passe referências a valores e registros dentro de seu programa.

OBS. Aqui no código fluente, no curso de C, tem uma explicação ilustrativa e detalhada de como funciona ponteiros em C, que é muito similar a como funciona em Go.

Segue o link:

https://www.codigofluente.com.br/aula-24-ponteiro-algoritmo-em-c/ 

Mostraremos como os ponteiros funcionam vendo um exemplo usando ponteiro (zeroptr) e um passando o valor como cópia (zeroval).

A zeroval recebe um parâmetro do tipo int, e os argumentos serão passados a ele por valor.


func zeroval(ival int) {
    ival = 0
    fmt.Println("(ZEROVAL) Guarda o valor em ival:", ival)
    fmt.Println("(ZEROVAL) &ival guarda o endereço de ival:", &ival)
}

A zeroval obterá uma cópia de ival distinta daquela na chamada da função, na main().

A zeroptr() tem um parâmetro * int, o que significa que recebe um ponteiro do tipo int.

O código * iptr no corpo da função, remove a referência do ponteiro de seu endereço de memória para o valor atual naquele endereço.

Atribuir um valor a um ponteiro não referenciado altera o valor no endereço referenciado.


func zeroptr(iptr *int) {
    *iptr = 0
    fmt.Println("(ZEROPTR) *iptr guarda o endereço de i:", iptr)
    fmt.Println("(ZEROPTR) &iptr guarda o endereço de iptr:", &iptr)
    fmt.Println("(ZEROPTR) *iptr guarda o valor que iptr aponta:", *iptr)
}

A sintaxe &i fornece o endereço de memória de i, ou seja, um ponteiro para i.

Ponteiros também podem ser impressos.


func main() {
    i := 1
    fmt.Println("(MAIN) i inicial:", i)

    zeroval(i)
    fmt.Println("(MAIN) valor de i na main depois de chamar a zeroval:", i)

    zeroptr(&i)
    fmt.Println("(MAIN) valor alterado do i através da zeroptr:", i)

    fmt.Println("(MAIN) ponteiro para i:", &i)
}

O zeroval não muda o i na main(), mas zeroptr sim, porque tem uma referência ao endereço de memória para essa variável.

A imagem abaixo ilustra no nosso código simplificado — sem alguns prints() — a diferença entre passagem de parâmetro para uma função, por valor e por referência de endereço de memória, usando ponteiro.

Ponteiros

Ponteiros

Código completo


package main

import "fmt"

func zeroval(ival int) {
    ival = 0
    fmt.Println("(ZEROVAL) Guarda o valor em ival:", ival)
    fmt.Println("(ZEROVAL) &ival guarda o endereço de ival:", &ival)
}

func zeroptr(iptr *int) {
    *iptr = 0
    fmt.Println("(ZEROPTR) *iptr guarda o endereço de i:", iptr)
    fmt.Println("(ZEROPTR) &iptr guarda o endereço de iptr:", &iptr)
    fmt.Println("(ZEROPTR) *iptr guarda o valor que iptr aponta:", *iptr)vvvvv
}

func main() {
    i := 1
    fmt.Println("(MAIN) i inicial:", i)

    zeroval(i)
    fmt.Println("(MAIN) valor de i na main depois de chamar a zeroval:", i)

    zeroptr(&i)
    fmt.Println("(MAIN) valor alterado do i através da zeroptr:", i)

    fmt.Println("(MAIN) ponteiro para i:", &i)
}

E pra executar é só entrar na pasta onde tá o arquivo pointers.go

go run pointers.go

Saída:

(MAIN) i inicial: 1
(ZEROVAL)
Guarda o valor em ival: 0
(ZEROVAL) &ival guarda o endereço de ival: 0xc0000140c0
(MAIN) valor de i na main depois de chamar a zeroval: 1
(ZEROPTR) *iptr guarda o endereço de i: 0xc000014098
(ZEROPTR) &iptr guarda o endereço de iptr: 0xc000006030
(ZEROPTR) *iptr guarda o valor que iptr aponta: 0
(MAIN) valor alterado do i através da zeroptr: 0
(MAIN) ponteiro para i: 0xc000014098 

É isso pessoal, fico por aqui.

Nos vemos na próxima aula, até mais. 🙂

Página principal do blog

Todas as aulas desse curso

Aula 17                        Aula 19

página do Código Fluente no
Facebook

Esse é o link do código fluente no Pinterest

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado e bons estudos. 😉

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>