Une simple différence lors du passage d'un pointeur comme argument de fonction

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.

Passer par valeur

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
}

Passer un pointeur

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é.

Résumé

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. ~~

finalement

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

Une simple différence lors du passage d'un pointeur comme argument de fonction
Utilisation de lambda (lors du passage d'une fonction comme argument d'une autre fonction)
Format lors du passage d'une longue chaîne comme argument de python
Une histoire à laquelle j'étais accro en spécifiant nil comme argument de fonction dans Go
[python] Fonction de rappel (passez la fonction en argument)
Précautions lors de l'utilisation d'une liste ou d'un dictionnaire comme argument par défaut
Précautions lors du décapage d'une fonction en python
Un simple script IDAPython pour nommer une fonction
Lorsqu'une variable locale portant le même nom que la variable globale est définie dans la fonction