[GO] Ein einfacher Unterschied bei der Übergabe eines Zeigers als Funktionsargument

Als ich Go studierte, entdeckte ich es wieder (oder überprüfte es eher) und stellte fest, dass die Grundlagen fehlten. Ich glaube, ich habe es gelernt, als ich C-Sprache gelernt habe, aber ich bin völlig verrückt, also werde ich es aufschreiben. In diesem Artikel werden C und Go als Beispiele verwendet.

Wert übergeben

Lassen Sie uns zunächst den Wert der Variablen normal an die Funktion übergeben.

#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 =Wird als 1 angezeigt
	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 =Wird als 1 angezeigt
	fmt.Println("a + 1 =", a1)	//a + 1 =2 wird angezeigt
}

Einen Zeiger übergeben

Als nächstes übergeben wir einen Zeiger.

#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 wird angezeigt
	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 wird angezeigt
	fmt.Println("a + 1 =", a1)	//a + 1 =2 wird angezeigt
}

Das Ergebnis hat sich geändert.

Zusammenfassung

Wenn Sie die Variable a normal übergeben, wird der Funktion eine Kopie von a übergeben. Die Änderungen werden also nicht auf das ursprüngliche "a" angewendet. Wenn Sie den ~~ Zeiger übergeben, wird die Adresse, an der a gespeichert ist, direkt geändert, also vom Vorgang des "Hinzufügens von 1 zu a" zu dem numerischen Wert in der Adresse, auf die ein "zeigt". Es wurde in den Prozess des "Hinzufügens von 1" geändert. Am Ende geht der Wert der Variablen "a", die sich an derselben Stelle befindet, ebenfalls von 1 auf 2. ~~

Schließlich

Es ist natürlich für jemanden, der es kann, aber ich habe es bisher mehrdeutig gehalten, also habe ich diese Gelegenheit genutzt, um es zu überprüfen. Ich hoffe es hilft jemandem auch nur ein bisschen.

Recommended Posts

Ein einfacher Unterschied bei der Übergabe eines Zeigers als Funktionsargument
Verwendung von Lambda (beim Übergeben einer Funktion als Argument einer anderen Funktion)
Format, wenn eine lange Zeichenfolge als Python-Argument übergeben wird
Eine Geschichte, nach der ich süchtig war, als ich in Go nil als Funktionsargument angab
[Python] Rückruffunktion (Funktion als Argument übergeben)
Vorsichtsmaßnahmen bei Verwendung einer Liste oder eines Wörterbuchs als Standardargument
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Ein einfaches IDAPython-Skript zum Benennen einer Funktion
Wenn eine lokale Variable mit demselben Namen wie die globale Variable in der Funktion definiert ist