Compréhension des pointeurs en Golang

GolangGolangBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce laboratoire va tester votre compréhension des pointeurs en Golang. Les pointeurs sont utilisés pour passer des références à des valeurs et des enregistrements dans votre programme.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/DataTypesandStructuresGroup(["Data Types and Structures"]) go/DataTypesandStructuresGroup -.-> go/pointers("Pointers") subgraph Lab Skills go/pointers -.-> lab-15494{{"Compréhension des pointeurs en Golang"}} end

Pointers

Le problème est de comprendre comment les pointeurs fonctionnent en contraste avec les valeurs grâce à deux fonctions : zeroval et zeroptr. zeroval a un paramètre int, donc les arguments lui seront passés par valeur. zeroval recevra une copie de ival distincte de celle de la fonction appelante. En revanche, zeroptr a un paramètre *int, ce qui signifie qu'il prend un pointeur int. Le code *iptr dans le corps de la fonction déréférence ensuite le pointeur de son adresse mémoire vers la valeur actuelle à cette adresse. Affecter une valeur à un pointeur déréférencé change la valeur à l'adresse référencée.

  • Vous devriez avoir une compréhension de base de Golang.
  • Vous devriez savoir comment définir et utiliser des fonctions en Golang.
  • Vous devriez savoir comment utiliser des pointeurs en Golang.
## `zeroval` ne change pas `i` dans `main`, mais
## `zeroptr` le fait car il a une référence à
## l'adresse mémoire de cette variable.
$ go run pointers.go
initial: 1
zeroval: 1
zeroptr: 0
pointer: 0x42131100

Voici le code complet ci-dessous :

// Go prend en charge <em><a href="https://en.wikipedia.org/wiki/Pointer_(computer_programming)">les pointeurs</a></em>,
// vous permettant de passer des références à des valeurs et des enregistrements
// dans votre programme.

package main

import "fmt"

// Nous allons montrer comment les pointeurs fonctionnent en contraste avec les valeurs grâce à
// 2 fonctions : `zeroval` et `zeroptr`. `zeroval` a un
// paramètre `int`, donc les arguments lui seront passés par
// valeur. `zeroval` recevra une copie de `ival` distincte
// de celle de la fonction appelante.
func zeroval(ival int) {
	ival = 0
}

// En revanche, `zeroptr` a un paramètre `*int`, ce qui signifie
// qu'il prend un pointeur `int`. Le code `*iptr` dans le
// corps de la fonction déréférence ensuite le pointeur de son
// adresse mémoire vers la valeur actuelle à cette adresse.
// Affecter une valeur à un pointeur déréférencé change la
// valeur à l'adresse référencée.
func zeroptr(iptr *int) {
	*iptr = 0
}

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

	zeroval(i)
	fmt.Println("zeroval:", i)

	// La syntaxe `&i` donne l'adresse mémoire de `i`,
	// c'est-à-dire un pointeur vers `i`.
	zeroptr(&i)
	fmt.Println("zeroptr:", i)

	// Les pointeurs peuvent également être affichés.
	fmt.Println("pointer:", &i)
}

Summary

Dans ce laboratoire, vous avez appris à utiliser les pointeurs en Golang. Vous avez également appris la différence entre le passage de valeurs et de pointeurs à des fonctions.