Pointeurs, allocation de mémoire, structures et types composites#
Introduction aux pointeurs#
- Les pointeurs sont des variables qui stockent l'adresse mémoire d'une autre variable.
- Leur utilisation permet une gestion efficace et flexible de la mémoire et facilite l'accès à des données spécifiques.
Opérateurs de pointeur#
- L'opérateur
&
est utilisé pour obtenir l'adresse d'une variable.- Exemple :
var myVar int = 10; var p *int = &myVar
- ici,p
est un pointeur versmyVar
.
- Exemple :
- L'opérateur
*
est utilisé pour déréférencer un pointeur, c'est-à-dire accéder à la valeur stockée à l'adresse pointée.- Exemple :
fmt.Println(*p)
- ceci affiche la valeur demyVar
.
- Exemple :
Allocation dynamique de mémoire avec make
et new
#
new
etmake
sont deux fonctions intégrées qui allouent de la mémoire.new(T)
alloue zéro valeur de type T, retourne un pointeur vers elle et ne nécessite pas d'être initialisé.- Exemple :
p := new(int)
- ceci crée un pointeur vers un int, initialisé à 0.
- Exemple :
make(T)
alloue et initialise un slice, une map ou un channel de type T, retourne une valeur initialisée (et non un pointeur) et est nécessaire pour l'utilisation de ces types de données.- Exemple :
s := make([]int, 10)
- ceci crée un slice d'ints de longueur 10, tous initialisés à 0.
- Exemple :
Utilisation des pointeurs dans les fonctions#
- Les pointeurs peuvent être passés à des fonctions pour modifier directement la valeur des arguments dans la fonction appelante.
- Cela permet des modifications "en place" et peut améliorer l'efficacité pour le passage de grands ensembles de données.
- Exemple :
func increment(x *int) { *x++ } var y int = 1 increment(&y) fmt.Println(y) // y vaut maintenant 2
- Exemple :
Passage par référence et passage par valeur#
- Go est principalement un langage "pass-by-value", ce qui signifie qu'il passe des copies des valeurs en tant qu'arguments aux fonctions.
- Exemple :
func increment(x int) { x++ } var y int = 1 increment(y) fmt.Println(y) // y est toujours 1
- Exemple :
- Cependant, avec l'utilisation de pointeurs, Go peut réaliser un "passage par référence", où l'adresse de la valeur est passée, permettant des modifications directes.
- Voir l'exemple précédent dans la section "Utilisation des pointeurs dans les fonctions".