Quand j'étudiais le Go, je l'ai redécouvert (ou plutôt revu) et j'ai réalisé que les bases manquaient. Je pense que je l'ai appris quand j'ai étudié le langage C, mais je suis complètement fou, alors je vais l'écrire. Dans cet article, C et Go sont utilisés comme exemples.
Tout d'abord, passons la valeur de la variable à la fonction normalement.
#include<stdio.h>
int plus1(int x){
x = x + 1 ;
return x ;
}
int main(void){
int a ;
a = 1 ;
plus1(a);
printf("a = %d\n",a);//a =Est affiché comme 1
return 0;
}
package main
import "fmt"
func plus1(x int) int{
x = x + 1
return x
}
func main(){
a := 1
a1 := plus1(a)
fmt.Println("a =", a) //a =Est affiché comme 1
fmt.Println("a + 1 =", a1) //a + 1 =2 s'affiche
}
Ensuite, passons un pointeur.
#include<stdio.h>
int plus1(int *x){
*x = *x + 1 ;
return *x ;
}
int main(void){
int a ;
a = 1 ;
plus1(&a);
printf("a = %d\n",a);//a =2 s'affiche
return 0;
}
package main
import "fmt"
func plus1(x *int) int{
*x = *x + 1
return *x
}
func main(){
a := 1
a1 := plus1(&a)
fmt.Println("a =", a) //a =2 s'affiche
fmt.Println("a + 1 =", a1) //a + 1 =2 s'affiche
}
Le résultat a changé.
Si vous passez la variable «a» normalement, la fonction recevra une copie de «a». Les modifications ne sont donc pas appliquées au «a» original. Lorsque vous passez le pointeur ~~, l'adresse où «a» est stocké est directement modifiée, donc à partir du processus "d'ajout de 1 à a" à la valeur numérique de l'adresse pointée par un " Il est devenu le processus d '«ajout de 1». Donc à la fin, la valeur de la variable «a» regardant au même endroit va aussi de 1 à 2. ~~
C'est naturel pour quelqu'un qui peut le faire, mais je l'ai gardé ambigu jusqu'à présent, alors j'ai profité de l'occasion pour l'examiner. J'espère que cela aide encore un peu quelqu'un.
Recommended Posts