2014-07-08 4 views
-2

Salut tout le monde dans Golang que ferez-vous si vous avez besoin de changer le pointeur (changer où le pointeur pointe à plutôt que de changer la valeur vers laquelle pointe ce pointeur). Je sais qu'il est vraiment facile en C++ en utilisant la référence, comme »golang a le pointeur du pointeur ou la fonction de référence du pointeur?

void myFunc(Type*& ptr) 
{ 
    ptr = anotherPointer; 
} 

int main 
{ 
    Type* ptr = &someValue; 
    myFunc(ptr); // ptr is moved 
} 

ou de manière équivalente en C, utilisez le pointeur de pointeur:

void myFunc(Type** ptrsptr) 
{ 
    *ptrsptr = anotherPointer; 
} 

int main 
{ 
    Type* ptr = &someValue; 
    myFunc(&ptr); // ptr is moved 
} 

Je me demande si golang a cette caractéristique propre, ou sinon, la seule façon est de mettre au retour de la fonction?

Répondre

4

Vous pouvez utiliser un pointeur vers un pointeur, comme dans C

http://play.golang.org/p/vE-3otpKkb

package main 

import "fmt" 

type Type struct{} 

var anotherPointer = &Type{} 

func myFunc(ptrsptr **Type) { 
    *ptrsptr = anotherPointer 
} 

func main() { 
    ptr := &Type{} 
    fmt.Printf("%p\n", ptr) 
    myFunc(&ptr) // ptr is moved 
    fmt.Printf("%p\n", ptr) 
} 
+0

Bonne réponse! Mais pourquoi golang n'adopte pas la référence de style C++? – Jun

+0

@Jun - parce que Go n'est pas C++. Go s'efforce d'avoir des fonctions orthogonales simples. – JimB

Questions connexes